Problema del barbero durmiente

Problema del barbero durmiente

Problema del barbero durmiente

En ciencias de la computación, el problema del barbero durmiente es un problema de sincronización. El problema consiste en una barbería en la que trabaja un barbero que tiene un único sillón 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 están ocupadas por clientes esperando). El problema consiste en realizar la actividad del barbero sin que ocurran condiciones de carrera. La solución implica el uso de semáforos y objetos de exclusión mutua para proteger la sección crítica.

Un semáforo es una variable protegida (o tipo abstracto de datos) que constituye el método clásico 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 electrónica y en programación concurrente, se conoce como condición de carrera al error que se produce en programas o circuitos lógicos que no se han construido adecuadamente para su ejecución simultánea con otros procesos.


Como se usa

  • El próximo codigo garantiza la sincronización 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 semáforo.
  • Se necesita:
 + semaforo Cliente = 0
 + semaforo Barbero = 0
 + semaforo SillasAccesibles = 1 //MUTEX = objetos de exclusión mutua
 + int SillasLibres = N //nro total de sillas
  • Función 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 código no crítico
 }
  • Función 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
   V(SillasAccesibles) //libero el bloqueo de las sillas
   //se va de la barbería
 }

Véase también

  • Problema de los filósofos cenando

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Mira otros diccionarios:

  • Problema del barbero durmiente — En informática, el problema del barbero durmiente es un problema de sincronización. El problema consiste en una barbería en la que trabaja un barbero que tiene un único sillón de barbero y varias sillas para esperar. Cuando no hay clientes, el… …   Enciclopedia Universal

  • Problema de la cena de los filósofos — Ilustración del problema de los filósofos cenando. El problema de los filósofos cenando es un problema clásico de las ciencias de la computación propuesto por Edsger Dijkstra en 1965 para representar el problema de la sincronización de procesos… …   Wikipedia Español

  • Semáforo (informática) — Un semáforo es una variable especial (o tipo abstracto de datos) que constituye el método clásico para restringir o permitir el acceso a recursos compartidos (por ejemplo, un recurso de almacenamiento del sistema o variables del código fuente) en …   Wikipedia Español

  • RESC — Saltar a navegación, búsqueda Es un programa que permite ejecutar diferentes comandos y scripts en ordenadores clientes de manera remota. Esta aplicación ha sido desarrollada en Linux con C++, Sockets, Hilos y Semáforos. Contenido 1 Historia 2… …   Wikipedia Español

  • Anexo:Episodios de Detective Conan — A continuación se presenta un listado de episodios de la serie Detective Conan, con su título original japonés (romanji y kanji), su traducción en español a partir del título original y el título del doblaje en España y en Hispanoamérica. Como… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”