algoritmo

Páginas: 2 (287 palabras) Publicado: 6 de noviembre de 2013
Algoritmo Productor Consumidor
Dos procesos comparten un mismo BUFFER de espacio limitado. El consumidor coloca información y el otro la saca, pudiéndose generalizar a N productores yconsumidores.
Cuando el productor quiere agregar un elemento, pero el BUFFER esta lleno, debe dormir hasta que el consumidor saque un elemento y entonces puede seguir agregandoelementos. Igualmente si el consumidor no tiene elementos que extraer del BUFFER, entonces duerme hasta que el productor coloque elementos.
#define N 100
int count = 0;
void producer(void)
{while (true) {
produce_intem();
if (count == N) sleep();
enter_item();
count = count + 1;
if (count == 1) wakeup(consumer);
}
}
void consumer(void)
{
while (true) {
if (count== 0) sleep();
remove_item();
count = count - 1;
if (count == N - 1) wakeup(producer);
consume_item();
}
}
Se da un problema porque por ejemplo, al estar vacío el BUFFER, elconsumidor esta evaluando su contador y ve que no hay datos, pero antes de dormirse el CPU pasa a ejecutar al productor, este pone un dato y despierta al consumidor, sin embargo como elConsumidor no llego a dormirse al reanudarse se duerme y el productor continua produciendo. Tarde o temprano el productor habrá llenado el BUFFER. Un arreglo es agregar un bit de espera donde siun proceso quiere despertar a uno que nunca se durmió, este bit evita que caiga de nuevo al Sleep(), pero esta solución se vuelve difícil de implementar con varios procesos y muchos bitsde espera.
Semáforos
Los semáforos vinieron a solucionar el problema de los productores y consumidores de varios procesos con un bit de espera para evitar problemas con el BUFFERcompartido. La solución la propuso E.W. Dijkstra (1965) introduciendo la variable de un semáforo con dos funciones manejadas atómicamente.
Las operaciones atómicas son:
P(S): WHILE S
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Algoritmo
  • Algoritmo
  • Algoritmos
  • Algoritmos
  • Algoritmos
  • Algoritmos
  • Algoritmos
  • Algoritmos

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS