Sei sulla pagina 1di 9

Implementacin con

Semforos
4. Productor Consumidor.

INTRODUCCION
El Problema Productor-Consumidor es un ejemplo clsico de
problema de sincronizacin de multi-procesos. El programa
describe dos procesos, productor y consumidor, ambos
comparten un buffer de tamao finito.
La tarea del productor es generar un producto, almacenarlo y
comenzar nuevamente; mientras que el consumidor toma
(simultneamente) productos uno a uno.
El problema consiste en que el productor no aada ms
productos que la capacidad del buffer y que el consumidor no
intente tomar un producto si el buffer est vaco.

Solucin con Semaforos


Un semforo es una variable entera a la que solo se accede
mediante dos operaciones atmicas estndar: wait() y signal().
La solucin con semforos es la siguiente, ambos procesos se
ejecutan simultneamente y se despiertan o duermen segn
el estado del buffer. Concretamente, el productor agrega
productos mientras quede espacio y en el momento en que se
llene el buffer se pone a dormir. Cuando el consumidor toma
un producto notifica al productor para que puede comenzar a
producir nuevamente.En caso contrario si el buffer se vaca, el
consumidor se pone a dormir y en el momento en que el
productor agrega un producto crea una seal para despertarlo.

Interbloqueos

Una implementacin de un semforo con una cola de espera


puede dar lugar a una situacin en la que dos o ms
procesos estn esperando indefinidamente a que se
produzca un suceso que slo puede producirse como
consecuencia de las operaciones efectuadas por otro de los
procesos en espera (el suceso en mencin es una signal).
Cuando se llega a un estado as, se dice que estos procesos
se han interbloqueado.
Los recursos retenidos por los procesos en interbloqueados
no estn disponibles para otros procesos.
Un ejemplo es de interbloqueo se da en la siguiente imagen.

Problema Productor/Consumidor

Un buffer en memoria con N slots disponibles


Necesita llevar cuenta de temes en buffer
Productor produce temes a ingresar al buffer
Consumidor consume temes del buffer

El problema consiste en que el productor no aada ms productos

que la capacidad del buffer y que el consumidor no intente tomar


un producto si el buffer est vaco.
Utilizamos tres semforos para la implementacin, que controlan
cada proceso hasta que el recurso est disponible. Los tres
semforos que empleamos son:
Mutex: accede al buffer y sus variables.
Vacio: cuenta el nmero de elementos vacos (inicializado a N).
El proceso consumidor no puede extraer datos si el buffer est
vaco.
Lleno:cuenta el nmero de elementos (inicializado a 0).
El proceso productor no puede introducir datos si el buffer est
lleno.

Potrebbero piacerti anche