SlideShare una empresa de Scribd logo
1 de 6
Descargar para leer sin conexión
PROGRAMANA NACIONAL DE FORMACIÓN EN INFORMÁTICA
UNIDAD CURRICULAR: SISTEMAS OPERATIVO.
Prof. Pura Castillo
Ejercicios Sincronización De Procesos
Semáforos
Enunciado 1
En un popular programa de televisión en el que invita a importantes personajes a
almorzar y conversar sobre sus vidas y sobre temas de actualidad. La dinámica
del programa es la siguiente:
• Al programa asisten N invitados. Los comensales se sientan a la mesa,
siendo el presentador el último en sentarse.
• Una vez que se sentó Presentador, los M mozos sirven la comida. Por
problemas de presupuesto, la cantidad de mozos es siempre menor a
la cantidad de invitados.
• Los mozos no deben servir más de N+1 platos. Cualquier comensal
(incluida Presentador) puede comenzar a comer, incluso si no han
terminado de servir a todos los invitados.
• Cuando Presentador termina de comer, ella lanza una pregunta
polémica. Esta pregunta puede ser respondida por cualquier invitado
que haya terminado de comer. Sólo un invitado debe responder la
pregunta.
• Para mantener alto el rating, Presentador se enoja muchísimo por la
respuesta polémica, se levanta y se va del estudio. Si Presentador ya
se ha levantado, los invitados pueden hacer lo mismo, pero sólo si ya
han terminado de comer.
Las primitivas disponibles son:
• sentarse()
• servir_comida()
• comer()
• enojarse()
• levantarse()
• lanzar_pregunta_polemica()
• lanzar_respuesta_polemica()
1. Realice una solución usando semáforos para el problema descripto
anteriormente.
Solución
sem Presentador PuedeSentarse = -N + 1 // Para que Presentador espere que se
sienten todos los invitados sem puedenServir = 0 // Para contener a los mozos en
sus gateras
sem sePuedeComer = 0
int platosRestantes = N + 1 // Cantidad de platos que falta servir sem
mutexPR = 1 // Controla el acceso a los datos relacionados con platos
para evitar RC
bool seRespondio = 0 // Para coordinar que sólo uno responda a la
pregunta sem mutexSR = 1
sem huboPregunta = 0 // Para que los comensales esperen la
pregunta polémica sem huboRespuesta = 0 // Para que Presentador
espere la respuesta polémica sem sePuedenIr = 0 // Para que los
invitados no se levanten hasta la partida de Presentador
Presentador
wait(Presentador PuedeSentarse)
sentarse()
// Despierto M mozos
signal(puedenServir, M)
wait(sePuedeComer)
comer()
lanzar_pregunta_polemica()
signal(huboPregunta)
wait(huboRespuesta)
enojarse() levantarse()
signal(sePuedenIr, N)
Mozos
wait(puedenServir) while 1:
wait(mutexPR) if
platosRestantes > 0:
platosRestantes-
signal(mutexPR)
servir_comida()
signal(sePuedeComer) else:
signal(mutexPR)
Invitado
sentarse()
signal(Presentador
PuedeSentarse)
wait(sePuedeComer)
comer() wait(huboPregunta)
wait(mutexSR) if seRespondio ==
0: lanzar_respuesta_polemica()
seRespondio = 1
signal(huboRespuesta)
// Destrabo a los demás
comensales
// para que puedan levantarse
cuando hayan // terminado de
comer.
signal(huboPregunta, N-1)
signal(mutexSR)
wait(sePuedenIr) levantarse()
break // Ya terminé de servir
Enunciado 2
Considera el siguiente trozo de código del problema productor-consumidor
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#include <pthread.h>
#include <unistd.h>
#include <stdbool.h>
#define MAX 10 #define FIN -1
int buffer[MAX];
sem t huecos, elementos;
int generar dato (void){ return random()%256; }
int numero aleatorio(void) { return random()%100; }
void ∗productor (void ∗p) {
int pos productor= 0;
int num, dato, n;
n= numero aleatorio();
printf ("Productor con%d datosn", n);
for(num= 0; num< n; num++) {
dato= generar dato(); sem wait (&huecos);
buffer[pos productor]= dato;
pos productor= (pos productor+ 1)%MAX;
sem post (&elementos);
}
buffer[pos productor]= FIN;
pthread exit (NULL);
}
void ∗consumidor(void ∗p){
int pos consumidor, dato;
bool continuar= true;
while (continuar) {
sem wait (&elementos);
dato= buffer[pos consumidor];
pos consumidor= (pos consumidor+1)%MAX; if (dato== FIN) continuar= false;
sem post (&huecos);
printf ("Numero aleatorio:%dn", dato);
}
pthread exit (NULL);
}
Nota: Este código c contiene errores y está incompleto .Corrige y completa .Haz
que el hilo consumidor muestre en pantalla todos los datos producidos por el
hilo productor.
Enunciado 3
Una peluquería en la que hay un barbero, una silla de peluquero y N sillas para
que se sienten los clientes en espera, si es que los hay. Si no hay clientes
presentes, el barbero se sienta en su silla de peluquero y se duerme. •Cuando
llega un cliente, éste debe despertar al barbero dormilón. Si llegan más clientes
mientras el barbero corta el cabello de un cliente, se sientan (si hay sillas
desocupadas) o salen de la peluquería (si todas las sillas están
ocupadas). Programar al barbero y los clientes. Corrige si existen errores
/* Solucion al problema del barbero dormilon. */
#define TRUE1
#define CHAIRS5
typedef struct
{
int value;
/* Lista de procesos. */
}
semaphore;
semaphore mutex, barber, customer;
int waiting = 0;
main ()
{
extern semaphore mutex, barber, customer;
InitSemaphore (mutex, 1);
InitSemaphore (barber, 0);
InitSemaphore (customer, 0);
/* Inicia los procesos barbero y clientes. */
}
void
Barber ()
{
while (TRUE)
{
/* Espera a que haya clientes. */
wait (customer);
/* Acceso exclusivo a waiting. */
wait (mutex);
/* Un cliente va a ser servido. */
waiting--;
/* Un barbero está libre. */
signal (barber);
signal (mutex);
/* Corta el pelo fuera de la seccion critica. */
CutHair ();
}
}
void
Customer ()
{
/* Acceso exclusivo a waiting. */
wait (mutex);
if (waiting < CHAIRS)
{
/* Si hay silla espera. */
waiting++;
/* Despierta al barbero. */
signal (customer);
signal (mutex);
/* Se va a dormir si no hay barberos. */
wait (barber);
GetHaircut ();
}
else
/* Se va si no hay sitio. */
signal (mutex);
}
Monitores
monitor lector_escritor {
int numerosdelectores = 0;
booleam ocupado = false;
condition okparaleer, okparaescribir;
Public:
Iniciarlectura{
If (ocupado | | (okparaescribir.cola) ) okparaleer.wait ();
Numerosdelectores = numerosdelectores + 1:
okparaleer.signal ();
};
Finalizarlectura {
Numerosdelectores = numerosdelectores – 1;
If (Numerosdelectores == 0) | | ocupado) okparaescribir.signal();
};
Iniciarescritura {
If (Numerosdelectores ¡= 0) | | ocupado)
okparaescribir.wait();
ocupado =true;
};
Finalizarescritura {
ocupado =false;
if (okparaescribir.cola)
okparaescribir.signal();
else
okparaleer.signal ();
};
};

Más contenido relacionado

Más de puracastillo

Ejercicios Propuestos Sincronización.pdf
Ejercicios Propuestos Sincronización.pdfEjercicios Propuestos Sincronización.pdf
Ejercicios Propuestos Sincronización.pdfpuracastillo
 
Ejercicios propuestos Procesos e Hilos
Ejercicios propuestos Procesos e Hilos Ejercicios propuestos Procesos e Hilos
Ejercicios propuestos Procesos e Hilos puracastillo
 
Gestiond memoria-pnfi
Gestiond memoria-pnfiGestiond memoria-pnfi
Gestiond memoria-pnfipuracastillo
 
Plan de clases proyecto iii fase1 2021
Plan de clases proyecto iii fase1 2021Plan de clases proyecto iii fase1 2021
Plan de clases proyecto iii fase1 2021puracastillo
 
Plan evaluacion uniencasa sistemas operativos2
Plan evaluacion uniencasa sistemas operativos2Plan evaluacion uniencasa sistemas operativos2
Plan evaluacion uniencasa sistemas operativos2puracastillo
 
Plan evaluacion uniencasa sistemas operativos
Plan evaluacion uniencasa sistemas operativosPlan evaluacion uniencasa sistemas operativos
Plan evaluacion uniencasa sistemas operativospuracastillo
 
Ejercicios propuestos ms
Ejercicios propuestos msEjercicios propuestos ms
Ejercicios propuestos mspuracastillo
 
Ejercicios propuestos metodo simplex
Ejercicios propuestos metodo simplexEjercicios propuestos metodo simplex
Ejercicios propuestos metodo simplexpuracastillo
 
Plan evaluación uniencasa investigación de operaciones
Plan evaluación uniencasa investigación de operacionesPlan evaluación uniencasa investigación de operaciones
Plan evaluación uniencasa investigación de operacionespuracastillo
 
Guia 2 metodo grafico
Guia 2 metodo graficoGuia 2 metodo grafico
Guia 2 metodo graficopuracastillo
 
Ejercicios propuestos metodo grafico
Ejercicios propuestos metodo graficoEjercicios propuestos metodo grafico
Ejercicios propuestos metodo graficopuracastillo
 
Entregables proyecto iii
Entregables proyecto iii Entregables proyecto iii
Entregables proyecto iii puracastillo
 
Baremos fase i y ii
Baremos fase i y iiBaremos fase i y ii
Baremos fase i y iipuracastillo
 
Estructura del informe final
Estructura del informe finalEstructura del informe final
Estructura del informe finalpuracastillo
 
Ejercicios propuestos sincronizac procesos
Ejercicios propuestos sincronizac procesosEjercicios propuestos sincronizac procesos
Ejercicios propuestos sincronizac procesospuracastillo
 
Ejercicios propuestos gestion de memoria
Ejercicios propuestos gestion de memoriaEjercicios propuestos gestion de memoria
Ejercicios propuestos gestion de memoriapuracastillo
 
Gestion de memoria
Gestion de memoriaGestion de memoria
Gestion de memoriapuracastillo
 

Más de puracastillo (20)

Ejercicios Propuestos Sincronización.pdf
Ejercicios Propuestos Sincronización.pdfEjercicios Propuestos Sincronización.pdf
Ejercicios Propuestos Sincronización.pdf
 
Ejercicios propuestos Procesos e Hilos
Ejercicios propuestos Procesos e Hilos Ejercicios propuestos Procesos e Hilos
Ejercicios propuestos Procesos e Hilos
 
Gestiond memoria-pnfi
Gestiond memoria-pnfiGestiond memoria-pnfi
Gestiond memoria-pnfi
 
Plan de clases proyecto iii fase1 2021
Plan de clases proyecto iii fase1 2021Plan de clases proyecto iii fase1 2021
Plan de clases proyecto iii fase1 2021
 
Plan evaluacion uniencasa sistemas operativos2
Plan evaluacion uniencasa sistemas operativos2Plan evaluacion uniencasa sistemas operativos2
Plan evaluacion uniencasa sistemas operativos2
 
Plan evaluacion uniencasa sistemas operativos
Plan evaluacion uniencasa sistemas operativosPlan evaluacion uniencasa sistemas operativos
Plan evaluacion uniencasa sistemas operativos
 
Ejercicios propuestos ms
Ejercicios propuestos msEjercicios propuestos ms
Ejercicios propuestos ms
 
Ejercicios propuestos metodo simplex
Ejercicios propuestos metodo simplexEjercicios propuestos metodo simplex
Ejercicios propuestos metodo simplex
 
Plan evaluación uniencasa investigación de operaciones
Plan evaluación uniencasa investigación de operacionesPlan evaluación uniencasa investigación de operaciones
Plan evaluación uniencasa investigación de operaciones
 
Guia 2 metodo grafico
Guia 2 metodo graficoGuia 2 metodo grafico
Guia 2 metodo grafico
 
Ejercicios propuestos metodo grafico
Ejercicios propuestos metodo graficoEjercicios propuestos metodo grafico
Ejercicios propuestos metodo grafico
 
Entregables proyecto iii
Entregables proyecto iii Entregables proyecto iii
Entregables proyecto iii
 
Baremos fase i y ii
Baremos fase i y iiBaremos fase i y ii
Baremos fase i y ii
 
Estructura del informe final
Estructura del informe finalEstructura del informe final
Estructura del informe final
 
Ejercicios propuestos sincronizac procesos
Ejercicios propuestos sincronizac procesosEjercicios propuestos sincronizac procesos
Ejercicios propuestos sincronizac procesos
 
Ejercicios propuestos gestion de memoria
Ejercicios propuestos gestion de memoriaEjercicios propuestos gestion de memoria
Ejercicios propuestos gestion de memoria
 
Tema3
Tema3Tema3
Tema3
 
Tema6 gestion e s
Tema6 gestion e sTema6 gestion e s
Tema6 gestion e s
 
Entrada y salida
Entrada y salidaEntrada y salida
Entrada y salida
 
Gestion de memoria
Gestion de memoriaGestion de memoria
Gestion de memoria
 

Último

Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxlupitavic
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfAlfaresbilingual
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdfValeriaCorrea29
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfpatriciaines1993
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOBRIGIDATELLOLEONARDO
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 

Último (20)

Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdf
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJOACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
ACTIVIDAD DIA DE LA MADRE FICHA DE TRABAJO
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 

Ejercicios sincronizacion de procesos

  • 1. PROGRAMANA NACIONAL DE FORMACIÓN EN INFORMÁTICA UNIDAD CURRICULAR: SISTEMAS OPERATIVO. Prof. Pura Castillo Ejercicios Sincronización De Procesos Semáforos Enunciado 1 En un popular programa de televisión en el que invita a importantes personajes a almorzar y conversar sobre sus vidas y sobre temas de actualidad. La dinámica del programa es la siguiente: • Al programa asisten N invitados. Los comensales se sientan a la mesa, siendo el presentador el último en sentarse. • Una vez que se sentó Presentador, los M mozos sirven la comida. Por problemas de presupuesto, la cantidad de mozos es siempre menor a la cantidad de invitados. • Los mozos no deben servir más de N+1 platos. Cualquier comensal (incluida Presentador) puede comenzar a comer, incluso si no han terminado de servir a todos los invitados. • Cuando Presentador termina de comer, ella lanza una pregunta polémica. Esta pregunta puede ser respondida por cualquier invitado que haya terminado de comer. Sólo un invitado debe responder la pregunta. • Para mantener alto el rating, Presentador se enoja muchísimo por la respuesta polémica, se levanta y se va del estudio. Si Presentador ya se ha levantado, los invitados pueden hacer lo mismo, pero sólo si ya han terminado de comer. Las primitivas disponibles son: • sentarse() • servir_comida() • comer() • enojarse() • levantarse() • lanzar_pregunta_polemica() • lanzar_respuesta_polemica()
  • 2. 1. Realice una solución usando semáforos para el problema descripto anteriormente. Solución sem Presentador PuedeSentarse = -N + 1 // Para que Presentador espere que se sienten todos los invitados sem puedenServir = 0 // Para contener a los mozos en sus gateras sem sePuedeComer = 0 int platosRestantes = N + 1 // Cantidad de platos que falta servir sem mutexPR = 1 // Controla el acceso a los datos relacionados con platos para evitar RC bool seRespondio = 0 // Para coordinar que sólo uno responda a la pregunta sem mutexSR = 1 sem huboPregunta = 0 // Para que los comensales esperen la pregunta polémica sem huboRespuesta = 0 // Para que Presentador espere la respuesta polémica sem sePuedenIr = 0 // Para que los invitados no se levanten hasta la partida de Presentador Presentador wait(Presentador PuedeSentarse) sentarse() // Despierto M mozos signal(puedenServir, M) wait(sePuedeComer) comer() lanzar_pregunta_polemica() signal(huboPregunta) wait(huboRespuesta) enojarse() levantarse() signal(sePuedenIr, N) Mozos wait(puedenServir) while 1: wait(mutexPR) if platosRestantes > 0: platosRestantes- signal(mutexPR) servir_comida() signal(sePuedeComer) else: signal(mutexPR) Invitado sentarse() signal(Presentador PuedeSentarse) wait(sePuedeComer) comer() wait(huboPregunta) wait(mutexSR) if seRespondio == 0: lanzar_respuesta_polemica() seRespondio = 1 signal(huboRespuesta) // Destrabo a los demás comensales // para que puedan levantarse cuando hayan // terminado de comer. signal(huboPregunta, N-1) signal(mutexSR) wait(sePuedenIr) levantarse() break // Ya terminé de servir
  • 3. Enunciado 2 Considera el siguiente trozo de código del problema productor-consumidor #include <stdio.h> #include <stdlib.h> #include <semaphore.h> #include <pthread.h> #include <unistd.h> #include <stdbool.h> #define MAX 10 #define FIN -1 int buffer[MAX]; sem t huecos, elementos; int generar dato (void){ return random()%256; } int numero aleatorio(void) { return random()%100; } void ∗productor (void ∗p) { int pos productor= 0; int num, dato, n; n= numero aleatorio(); printf ("Productor con%d datosn", n); for(num= 0; num< n; num++) { dato= generar dato(); sem wait (&huecos); buffer[pos productor]= dato; pos productor= (pos productor+ 1)%MAX; sem post (&elementos); } buffer[pos productor]= FIN; pthread exit (NULL); } void ∗consumidor(void ∗p){ int pos consumidor, dato; bool continuar= true; while (continuar) { sem wait (&elementos); dato= buffer[pos consumidor]; pos consumidor= (pos consumidor+1)%MAX; if (dato== FIN) continuar= false; sem post (&huecos); printf ("Numero aleatorio:%dn", dato); } pthread exit (NULL);
  • 4. } Nota: Este código c contiene errores y está incompleto .Corrige y completa .Haz que el hilo consumidor muestre en pantalla todos los datos producidos por el hilo productor. Enunciado 3 Una peluquería en la que hay un barbero, una silla de peluquero y N sillas para que se sienten los clientes en espera, si es que los hay. Si no hay clientes presentes, el barbero se sienta en su silla de peluquero y se duerme. •Cuando llega un cliente, éste debe despertar al barbero dormilón. Si llegan más clientes mientras el barbero corta el cabello de un cliente, se sientan (si hay sillas desocupadas) o salen de la peluquería (si todas las sillas están ocupadas). Programar al barbero y los clientes. Corrige si existen errores /* Solucion al problema del barbero dormilon. */ #define TRUE1 #define CHAIRS5 typedef struct { int value; /* Lista de procesos. */ } semaphore; semaphore mutex, barber, customer; int waiting = 0; main () { extern semaphore mutex, barber, customer; InitSemaphore (mutex, 1); InitSemaphore (barber, 0); InitSemaphore (customer, 0); /* Inicia los procesos barbero y clientes. */ } void Barber () { while (TRUE) { /* Espera a que haya clientes. */ wait (customer); /* Acceso exclusivo a waiting. */ wait (mutex); /* Un cliente va a ser servido. */ waiting--; /* Un barbero está libre. */ signal (barber); signal (mutex);
  • 5. /* Corta el pelo fuera de la seccion critica. */ CutHair (); } } void Customer () { /* Acceso exclusivo a waiting. */ wait (mutex); if (waiting < CHAIRS) { /* Si hay silla espera. */ waiting++; /* Despierta al barbero. */ signal (customer); signal (mutex); /* Se va a dormir si no hay barberos. */ wait (barber); GetHaircut (); } else /* Se va si no hay sitio. */ signal (mutex); } Monitores monitor lector_escritor { int numerosdelectores = 0; booleam ocupado = false; condition okparaleer, okparaescribir; Public: Iniciarlectura{ If (ocupado | | (okparaescribir.cola) ) okparaleer.wait (); Numerosdelectores = numerosdelectores + 1: okparaleer.signal (); }; Finalizarlectura { Numerosdelectores = numerosdelectores – 1; If (Numerosdelectores == 0) | | ocupado) okparaescribir.signal(); }; Iniciarescritura { If (Numerosdelectores ¡= 0) | | ocupado)
  • 6. okparaescribir.wait(); ocupado =true; }; Finalizarescritura { ocupado =false; if (okparaescribir.cola) okparaescribir.signal(); else okparaleer.signal (); }; };