Productor consumidor

Solo disponible en BuenasTareas
  • Páginas : 6 (1365 palabras )
  • Descarga(s) : 0
  • Publicado : 8 de diciembre de 2010
Leer documento completo
Vista previa del texto
El problema Productor/Consumidor
El problema Productor/Consumidor es uno de los ejemplos cl´sicos de acceso a recursos compara tidos que debe arbitrarse mediante alg´n mecanismo de concurrencia que implemente la exclusi´n u o m´tua. u A continuaci´n se proporcionan versiones que implementan la exclusi´n m´tua mediante la utio o u lizaci´n de: o Monitores Java: monitores restringidos a una unicavariable de condici´n impl´ ´ o ıcita. Monitores Signal and Continue: modelo general de monitores con m´s de una variable de condia ci´n. o El problema Productor/Consumidor consiste en el acceso concurrente por parte de procesos productores y procesos consumidores sobre un recurso com´n que resulta ser un buffer de elementos. Los u productores tratan de introducir elementos en el buffer de uno enuno, y los consumidores tratan de extraer elementos de uno en uno. Para asegurar la consistencia de la informaci´n almacenada en el buffer, el acceso de los produco tores y consumidores debe hacerse en exclusi´n m´tua. Adicionalmente, el buffer es de capacidad o u limitada, de modo que el acceso por parte de un productor para introducir un elemento en el buffer lleno debe provocar la detenci´n delproceso productor. Lo mismo sucede para un consumidor que o intente extraer un elemento del buffer vac´ ıo. Los ficheros proporcionados para la versi´n nativa de Java estan en el directorio ProdConsJava o y los de la versi´n general de monitores en el directorio ProdConsMonitor. Los ficheros son los o siguientes: ProducerConsumerTest.java fichero principal Producer.java clase Producer Consumer.java claseConsumer Buffer.java monitor Buffer CircularQueue.java cola concreta CircularQueue Queue.java cola abstracta Queue En el caso de la versi´n general de monitores se necesitan adem´s los siguientes ficheros para impleo a mentar variables de condici´n: o Semaphore.java clase Semaphore (tal como lo defini´ E. W. Dijkstra) o Monitor.java monitor de bajo nivel o variable m´tex u Condition.java claseCondition. Implementa variables de condici´n. o La aplicaci´n como tal queda recogida en el fichero ProducerConsumerTest.java. En ´l se impleo e menta el m´todo void main(String[] args) que ejecuta el conjunto de la aplicaci´n. La ejecuci´n e o o consiste en la creaci´n de dos objetos de las clases Producer y Consumer, para as´ operar con dos o ı productores y dos consumidores. Una vez creadas lasinstancias de cada clase, se invoca el m´todo e start() de cada productor y consumidor para iniciar la ejecuci´n en paralelo de cada uno de estos o Threads. La clase Producer implementa la l´gica de un proceso productor. Dentro del m´todo run() o e produce un nuevo elemento de tipo Object y a continuaci´n lo introduce en el buffer invocando al o m´todo Put(Object) de la clase Buffer definido para ello.Entre elemento y elemento introducido e se hace dormir al proceso un tiempo aleatorio.

La clase Consumer implementa la l´gica de un proceso consumidor. El cometido del proceso es o extraer un elemento del buffer invocando al m´todo Object Get() de la clase Buffer definido para e ello, a continuaci´n el proceso se hace dormir un tiempo aleatorio. o La clase Buffer es un monitor de usuario. Arbitra elacceso concurrente por parte de productores y consumidores mediante la ejecuci´n en exclusi´n m´tua de los m´todos correspondientes. Obs´rvese o o u e e la diferencia entre el modelo nativo Java y el modelo general. En particular la clase Buffer define los siguientes m´todos: e public /*synchronized (s´lo Java nativo)*/ Object Get() o public /*synchronized (s´lo Java nativo)*/ void Put(Object value)o El constructor de la clase Buffer mantiene en realidad una instancia de la clase abstracta Queue que toma como valor concreto una instancia de la clase concreta CircularQueue que se pasa como par´metro. a La clase CircularQueue implementa una cola circular de capacidad limitada, y se declara como extensi´n de la clase Queue, esto es as´ porque la clase Queue es una clase abstracta que o ı...
tracking img