Problema productor-consumidor


En informática , el problema del productor-consumidor (también conocido como problema del búfer acotado ) es una familia de problemas descritos por Edsger W. Dijkstra desde 1965.

El caso intermedio ilimitado: consideramos dos procesos, que se denominan 'productor' y 'consumidor' respectivamente. El productor es un proceso cíclico y cada vez que pasa por su ciclo produce cierta porción de información, que tiene que ser procesada por el consumidor. El consumidor también es un proceso cíclico y cada vez que pasa por su ciclo, puede procesar la siguiente porción de información, tal como ha sido producida por el productor ... Suponemos que los dos procesos están conectados para este propósito a través de un búfer con capacidad ilimitada. [1]

El caso del búfer acotado: En la sección 4.1 hemos estudiado un productor y un consumidor acoplados a través de un búfer con capacidad ilimitada... La relación se vuelve simétrica, si los dos están acoplados a través de un búfer de tamaño finito, digamos N porciones [2]

El caso productor-consumidor múltiple: Consideramos un número de pares productor/consumidor, donde el par i está acoplado a través de un flujo de información que contiene n i porciones. Asumimos... el búfer finito que debe contener todas las porciones de todos los flujos para tener una capacidad de porciones 'tot'. [3]

Dijkstra encontró la solución para el problema productor-consumidor mientras trabajaba como consultor para las computadoras Electrologica X1 y X8. El primer uso de productor-consumidor fue en parte software, en parte hardware: el componente que se encargaba del transporte de información entre la tienda y el periférico se llamaba 'un canal'... La sincronización estaba controlada por dos semáforos de conteo en lo que ahora conocemos como el productor. /disposición del consumidor: el semáforo que indica la longitud de la cola, fue incrementado (en una V) por la CPU y decrementado (en una P) por el canal, el otro, contando el número de finalizaciones no reconocidas, fue incrementado por el canal y decrementada por la CPU. [Si el segundo semáforo es positivo, se activará la bandera de interrupción correspondiente.] [4]

Per Brinch Hansen y Niklaus Wirth pronto vieron el problema de los semáforos: he llegado a la misma conclusión con respecto a los semáforos, es decir, que no son adecuados para lenguajes de nivel superior. En cambio, los eventos de sincronización natural son intercambios de mensajes . [5]