Algoritmo de Barbero Dormilon
Algoritmo de Barbero Dormilon
Algoritmo de Barbero Dormilon
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