Sei sulla pagina 1di 3

Problema del barbero durmiente

Problema del barbero durmiente


En ciencias de la computacin, el problema del barbero durmiente es 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 ocurran condiciones de carrera. La solucin implica el uso de semforos y objetos de exclusin mutua para proteger la seccin 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 de multiprocesamiento. Fueron inventados por Edsger Dijkstra y se usaron por primera vez en el sistema operativo THEOS. En electrnica y en programacin concurrente, se conoce como condicin de carrera al error que se produce en programas o circuitos lgicos que no se han construido adecuadamente para su ejecucin simultnea con otros procesos.

Como se usa
El prximo cdigo garantiza la sincronizacin entre el barbero y el cliente, pero puede llevar a que el cliente se quede sin silla. P() y V() son funciones provistas por el semforo. Se necesita: + + + + semaforo Cliente = 0 semaforo Barbero = 0 semaforo SillasAccesibles = 1 //MUTEX = objetos de exclusin mutua int SillasLibres = N //nro total de sillas

Funcin barbero (Proceso/hilo-thread): while(true) { //ciclo infinito P(Cliente) //si no tiene cliente se duerme P(SillasAccesibles) //ya est despierto y quiere modificar el nro de sillas SillasLibres++ //queda disponible una silla V(Barbero) // el Barbero est listo para cortar V(SillasAccesibles) //no se necesitan bloquear las sillas //el barbero corta el pelo, zona de cdigo no crtico } Funcin cliente (Proceso/hilo-thread):
P(SillasAccesibles) //trata de acceder a una silla if ( SillasLibres > 0 ) { //si hay sillas libres SillasLibres -- //se sienta en una V(Cliente) //avisa al barbero, el cual est esperando, que haya un cliente V(SillasAccesibles) // no se necesitan bloquear las sillas P(Barbero) // ahora le toca al cliente, pero espera si el barbero est ocupado //se le est cortando el pelo al cliente } else { // no hay sillas libres

Problema del barbero durmiente


V(SillasAccesibles) //libero el bloqueo de las sillas //se va de la barbera }

Vase tambin
Problema de los filsofos cenando

Enlaces externos
Wikilibros tiene una solucin a este problema en el manual de Programacin en Ada

Fuentes y contribuyentes del artculo

Fuentes y contribuyentes del artculo


Problema del barbero durmiente Fuente: http://es.wikipedia.org/w/index.php?oldid=46812022 Contribuyentes: Antipatico, Ascnder, Bgangioni, Dodo, GermanX, ManuelGR, Martincarr, Moriel, Nicolasdiaz, PACO, Pantulis, Pinar, Sikamikan, Vitorres, Yermet, 7 ediciones annimas

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/

Potrebbero piacerti anche