Contadores de Eventos(Problema del productor y consumidor)

2,760 views

Published on

Contadores de Eventos
El problema del productor y consumidor

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,760
On SlideShare
0
From Embeds
0
Number of Embeds
310
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Contadores de Eventos(Problema del productor y consumidor)

  1. 1. Problema del productor y el consumidor Carolina Dávila Llerena Lic. Diseño Web y Aplicaciones Multimedia
  2. 2.  Dos procesos comparten un almacén de tamaño fijo. Uno de ellos, el productor coloca información en el almacén, mientras que el otro, el consumidor, la obtiene de él. El problema surge cuando el productor desea colocar un nuevo elemento en el almacén, pero está lleno.
  3. 3.  Si el almacén está lleno el productor debe irse a dormir. El consumidor debe despertar al productor cuando haya eliminado uno o más elementos del almacén. Si el consumidor desea eliminar algún elemento del almacén y está vacío debe irse a dormir.
  4. 4.  El productor despierta al consumidor cuando ha puesto algo en el almacén. Se necesita saber el tamaño del almacén. Con está técnica no se necesita la exclusión mutua. Se utiliza un tipo especial de variable llamada contador de eventos.
  5. 5.  Hay tres operaciones sobre el contador de eventos (E): Read(E). Da el valor actual de E. Advanced(E). Incrementa a E en 1. Await(E,v). Espera a que E >= v.
  6. 6.  Los contadores inician en 0 y sólo aumentan. Se usan dos contadores de eventos, in e out.
  7. 7.  in, cuenta el número de elementos que el productor ha colocado en el almacén desde el inicio de la ejecución del programa. out, cuenta el número de elementos que el consumidor ha retirado del almacén hasta el momento.
  8. 8.  Cuando el productor desea colocar un elemento en el almacén, verifica si hay espacio por medio de await. El consumidor espera a que in sea igual a k- elemento, es decir, que el productor ha colocado k elementos en el almacén, antes de eliminarlo.
  9. 9. #include “prototypes.h”#define N 100 /*número de entradas en el almacén (buffer)*/typedef int event_counter; /*event_counter son un tipo especial de int*/event_counter in = 0; /*cuenta los elementos insertados en el almacén (buffer) */event_counter out = 0; /*cuenta los elementos retirados del almacén (buffer)*/void producer(void){ int item, sequence = 0; while (TRUE) { /*ciclo infinito*/ sequence = sequence + 1; /*número de elemento a eliminar del almacén (buffer)*/ await(in, sequence); /*espera a que esté presente el elemento del espacio*/ remove_item(&item); /*retira al elemento de la entrada (sequence – 1) % N */ Advance(&out); /*deja que el productor se entere de que el elemento ha sido retirado*/ consume_item(item) /*hace algo con el elemento*/ }}

×