Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 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:
// Proceso barbero
while (true) {
// esperar hasta que haya un cliente
while (!cliente_en_silla) {
// busy wait
}
// Proceso cliente
while (true) {
// verificar si el barbero está dormido
while (barbero_dormido) {
// busy wait
}
// 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.
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();
// Proceso cliente
while (true) {
// verificar si el barbero está dormido
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.
Bibliografía