Reglas gramaticales - Compiladores

Páginas: 13 (3099 palabras) Publicado: 1 de abril de 2013
+

























El problema del productor y el consumidor

Planteamiento.
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.

Análisis.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.

El productor despierta al consumidor cuando ha puesto algo en el almacén.

Se necesita saber el tamaño del almacén.


Planteamiento de lasolución.
Se tiene una variable que lleva el control del estado del almacén (cont, por ejemplo).

Si cont = N, donde N es el tamaño del almacén, el productor se va a dormir, sino sigue produciendo e incrementa a cont.

Para el consumidor si cont = 0 (almacén vacío), se va a dormir, sino elimina un elemento del almacén y decrementa cont.

Cada proceso verifica si el otro proceso debe estardormido, sino debe estar dormido, lo despierta.

Planteamiento de la solución.
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.
Los contadores inician en 0 y sólo aumentan.
Se usan dos contadores de eventos, in e out.
in, cuenta el número de elementos que el productor ha colocado enel 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.
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 deeliminarlo.

Algoritmo

#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 alelemento 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*/
}
}














EL problema de la cena de los filósofos
También conocido como “El problema de losfilósofos cenando” o “El problema de los filósofos comensales”, es un problema clásico de las ciencias de la computación propuesto por el científico Edsger Dijkstra* para representar los inconvenientes que plantea la sincronización de procesos en un sistema operativo.
Independientemente de tenedores o palillos (yo optaré por estos últimos), el enunciado sería el siguiente:
Hay cinco filósofossentados alrededor de una mesa que pasan su vida cenando y pensando. Cada uno dispone de un plato de arroz y un palillo a la izquierda de su plato, pero para comer son necesarios dos palillos y cada filósofo sólo puede coger el que está a su izquierda o el que hay a su derecha. Con un solo palillo en la mano no tienen más remedio que esperar hasta que atrapen otro y puedan seguir comiendo.
Si dos...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • reglas gramaticales
  • reglas gramaticales
  • Reglas Gramaticales
  • Reglas Gramaticales
  • Reglas Gramaticales
  • Reglas Gramaticales
  • reglas gramaticales
  • Reglas Gramaticales

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS