cena de los filosofos

Download Cena de Los Filosofos

If you can't read please download the document

Upload: oswaldoehc

Post on 16-Dec-2015

8 views

Category:

Documents


3 download

DESCRIPTION

Cena de Los Filosofos

TRANSCRIPT

cena de los filosofoshttp://es.slideshare.net/

https://es.wikipedia.org/

https://es.wikipedia.org/wiki/Problema del barbero durmiente

El barbero le est cortando el pelo al clienteEnciencias de la computacin, elproblema del barbero durmientees un problema de sincronizacin. El problema consiste en una barbera en la que trabaja un barbero que tiene un nico silln de barbero y varias sillas para esperar. Cuando no hay clientes, el barbero se sienta en una silla y se duerme. Cuando llega un nuevo cliente, ste o bien despierta al barbero o si el barbero est afeitando a otro cliente se sienta en una silla (o se va si todas las sillas estn ocupadas por clientes esperando). El problema consiste en realizar la actividad del barbero sin que ocurrancondiciones de carrera. La solucin implica el uso desemforosyobjetos de exclusin mutuapara proteger laseccin crtica.Un semforo es una variable protegida (o tipo abstracto de datos) que constituye el mtodo clsico para restringir o permitir el acceso a recursos compartidos (por ejemplo, un recurso de almacenamiento) en un entorno demultiprocesamiento. Fueron inventados por Edsger Dijkstra y se usaron por primera vez en el sistema operativoTHEOS.En electrnica y enprogramacin concurrente, se conoce comocondicin de carreraal error que se produce en programas o circuitos lgicos que no se han construido adecuadamente para su ejecucin simultnea con otros procesos.

ImplementacinEl prximo pseudo-cdigo garantiza la sincronizacin entre el barbero y el cliente, pero puede llevar a inanicin del cliente.wait()ysignal()son funciones provistas por elsemforo.

Se necesita:

Semforo barberoListo = 0 // (Mutex, slo 1 0) Semforo sillasAccesibles = 1 // (Mutex) Cuando sea 1, el numero de sillas libres puede aumentar o disminuirSemforo clientes = 0 // Nmero de clientes en la sala de esperaint sillasLibres = N // N es el nmero total de sillasFuncin barbero (Proceso/hilo-thread):

while(true) // Ciclo infinito{wait(clientes) // Tratar de atender a un cliente. Si no hay, ir a dormir.wait(sillasAccesibles) // (Ya est despierto) Tratar de modificar el nro. de sillas disponibles.sillasLibres += 1 // Queda disponible una silla en la sala.signal(barberoListo) // El barbero est listo para cortar.signal(sillasAccesibles) // Ya no se modificar el nro. de sillas libres. Desbloquear.// Aqu el barbero corta el pelo de un cliente (zona de cdigo no crtico).}Funcin cliente (Proceso/hilo-thread):

wait(sillasAccesibles) // Trata de acceder a una silla.if (sillasLibres > 0) // Si hay sillas disponibles.{sillasLibres =- 1 // Se sienta en una silla.signal(clientes) // Avisar al barbero (el cual est esperando) que hay un cliente.signal(sillasAccesibles) // Ya no se necesita bloquear el nro de sillas libres.wait(barberoListo) // El cliente espera a que el barbero est listo para atenderlo.// Se le corta el pelo al cliente.}else // Si no hay sillas libres.{ signal(sillasAccesibles) // Desbloquear la modificacin de sillas libres para otros procesos/hebras.// El cliente se va de la barbera}