Problema dels productors i consumidors

From Wikipedia, the free encyclopedia

Remove ads

El problema dels productors i consumidors és un cas concret en informàtica de sincronització de recursos que podem trobar en entorns de programació concurrent. Es tracta de compartir entre dos processos (el productor i el consumidor) una àrea de memòria buffer utilitzada com a cua on el productor genera missatges de dades i el consumidor els rep[1] de forma segura.

Aquest problema es pot generalitzar en diversos productors o consumidors[2] o plataformes comunicades a través de la xarxa. La cua pot estar a memòria o suportada per un sistema d'emmagatzematge persistent.

Remove ads

Implementació

La implementació d'aquest algorisme sovint planteja un problema, sobretot si la memòria compartida és de mida fixa, ja que llavors s'ha d'assegurar que el productor no afegirà dades a una cua completa i que el consumidor no intentarà extreure dades d'una cua buida.

Es poden plantejar diferents solucions. Una solució habitual és modificar el productor de manera que conservi el nombre de llocs lliures a la cua i fer que s'aturi en lloc d'escriure les dades si la cua està plena. Aleshores, el consumidor ha d'avisar el productor quan ha consumit dades i la cua ja no està plena. També podríem implementar un comportament invers, on el productor avisa el consumidor quan afegeix elements a la cua. Aquesta solució es pot implementar mitjançant semàfors[3] o comunicació entre processos.

Remove ads

Exemple

Considereu un conjunt de productors, un consumidor i una cua. El problema és sincronitzar l'accés a una impressora.

El codi executat pels productors és el següent:

crear un document D
blocar F
afegir D al final de la fila F
desblocar F
enviar un senyal al consumidor

El codi executat pel consumidor:

repetir
 esperar un senyal d'F
 mentre F no és buit
 per cada element E d'F
 blocar F
 imprimir E
 supprimir E d'F
 desblocarr F
 fi per
 fi mentre
 esperar un senyal d'un productor
fi repetir

La implementació està inspirada en fils POSIX (pthreads). Tingueu en compte que l'espera de senyal és una operació que desbloqueja el mutex associat, espera un senyal d'un altre fil i, a continuació, torna a bloquejar el mutex un cop rebut el senyal.

Remove ads

Notes i referències

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads