Está en la página 1de 3

Problema Productor - Consumidor

El problema del barbero dormilón es un problema clásico de sincronización de procesos concu-


rrentes. El problema se describe como un barbero que tiene una silla de barbero y un número
infinito de sillas de espera. Los clientes llegan al barbero para cortarse el pelo, pero el barbero
solo puede atender a un cliente a la vez. El problema es garantizar que el barbero no se quede
dormido mientras espera a un cliente, y que los clientes no se queden esperando indefinida-
mente.

Solución al problema del barbero dormilón

El problema del barbero dormilón se puede resolver utilizando un algoritmo de exclusión mutua.
El algoritmo debe garantizar que el barbero y los clientes no accedan a la silla de barbero al mismo
tiempo.

Una solución simple al problema del barbero dormilón

Una solución simple al problema del barbero dormilón es utilizar dos variables de bandera, bar-
bero_dormido y cliente_en_silla. La variable barbero_dormido indica si el barbero está dormido, mien-
tras que la variable cliente_en_silla indica si hay un cliente en la silla de barbero.

El barbero puede acceder a la silla de barbero solo si la variable barbero_dormido es false. Un cliente
puede sentarse en la silla de barbero solo si la variable cliente_en_silla es false.

El algoritmo de exclusión mutua para el problema del barbero dormilón se puede implementar
de la siguiente manera:

bool barbero_dormido = true;


bool cliente_en_silla = false;

// Proceso barbero
while (true) {
// esperar hasta que haya un cliente
while (!cliente_en_silla) {
// busy wait
}

// cortar el pelo al cliente


// ...

// indicar que el barbero está dormido


barbero_dormido = true;
cliente_en_silla = false;
}

// Proceso cliente
while (true) {
// verificar si el barbero está dormido
while (barbero_dormido) {
// busy wait
}

// sentarse en la silla de barbero


cliente_en_silla = true;

// despertar al barbero
barbero_dormido = false;
}

Este algoritmo es simple y fácil de implementar. Sin embargo, no es muy eficiente, ya que el
barbero y los clientes deben esperar pasivamente (busy wait) mientras el barbero está dormido
o la silla de barbero está ocupada, respectivamente.

Otras soluciones al problema del barbero dormilón

Existen otras soluciones al problema del barbero dormilón que son más eficientes que la solu-
ción simple descrita anteriormente. Una solución común es utilizar semáforos.

En esta solución, se utilizan dos semáforos, uno para indicar si el barbero está dormido y otro
para indicar si la silla de barbero está ocupada.

El algoritmo de exclusión mutua para el problema del barbero dormilón se puede implementar
de la siguiente manera:

semaphore barbero_dormido = 1;
semaphore cliente_en_silla = 1;

// Proceso barbero
while (true) {
// esperar hasta que haya un cliente
cliente_en_silla.wait();

// cortar el pelo al cliente


// ...

// indicar que el barbero está dormido


barbero_dormido.signal();
cliente_en_silla.signal();
}

// Proceso cliente
while (true) {
// verificar si el barbero está dormido
barbero_dormido.wait();

// sentarse en la silla de barbero


cliente_en_silla.signal();
// barbero_dormido.wait();
}

Esta solución es más eficiente que la solución simple, ya que el barbero y los clientes solo espe-
ran pasivamente (busy wait) cuando el semáforo correspondiente está en 0.

Aplicaciones del problema del barbero dormilón

El problema del barbero dormilón es un problema de sincronización de procesos concurrentes


que se puede encontrar en una variedad de aplicaciones. Algunos ejemplos incluyen:

• Un sistema operativo que comparte una impresora entre varios procesos.


• Un servidor web que comparte una conexión de red entre varios procesos.
• Una aplicación de base de datos que comparte un recurso entre varios procesos.
Conclusión

El problema del barbero dormilón es un problema clásico de sincronización de procesos concu-


rrentes que se puede resolver utilizando un algoritmo de exclusión mutua. Existen varias solu-
ciones posibles al problema

Bibliografía

• Peterson, G. L. (1981). Peterson's solution to the mutual exclusion


problem. Communications of the ACM, 25(2), 11-15.
• Tanenbaum, A. S., & Woodhull, A. S. (2014). Operating systems: Design and
implementation (4th ed.). Pearson.
• Stallings, W. (2018). Operating systems: Internals and design principles (10th ed.).
Pearson.

También podría gustarte