Sistemas operativos modernos
Si el productor trabaja más rápido que el consumidor, todos los mensajes se llenarán y es tarán esperando al consumidor; el productor se bloqueará, en espera de la devolución de un men saje vacío. Si el consumidor trabaja a mayor velocidad, ocurrirá lo contrario: todos los mensajes estarán vacíos en espera de que el productor los llene; el consumidor se bloqueará esperando un mensaje lleno. #define N 100 r ranuras en el búfer */ void productor(void) { int eiem; mensaje m; while (TRUE) { eiem = producir_elem{ ); receive(consumidor, &m); formar_mensaje(&m, eiem); send(consumidor, &m); } /* búfer de mensajes V r genera algo que poner en búfer */ /* espera un mensaje vacío */ /* construye un mensaje para enviar V r envía un elemento al consumidor V void consumidor(void) í int eiem, i; mensaje m; for (i = 0; i < N; i++) send(productor, &m); /* envía N vacíos V while (TRUE) { recelve(productor, &m); eiem = extraer_elem(&m); send(productor, &m); consumlr_elem(elem): r obtiene los mensajes que contienen eiem V r extrae eiem del mensaje */ r devuelve respuesta vacía V r hace algo con eiem V } Figura 2-29. El problema del productor-consumidor con N mensajes. Puede haber muchas variantes de la transferencia de mensajes. Para empezar, veamos có mo se dirigen los mensajes. Una posibilidad es asignar a cada proceso una dirección única y dirigir los mensajes a procesos. Otra es inventar una nueva estructura de datos llamada buzón, que es un búfer con capacidad para almacenar cierto número de mensajes, que por lo general se especifica cuando se crea. Cuando se usan buzones, los parámetros de dirección de las lla madas send y receive son buzones, no procesos. Cuando un proceso intenta enviar un men
RkJQdWJsaXNoZXIy MjI4NDcx