Algorítimo barbeiro
O Barbeiro Dorminhoco consiste no seguinte: um barbeiro possui uma barbearia que funciona em horário comercial. Se nenhum cliente aparece, o barbeiro tira um cochilo. Se há clientes sentados nas cadeiras, o barbeiro atende por ordem de chegada. Se um cliente chega na barbearia e encontra as cadeiras lotadas, vai embora. Se um cliente chega na barbearia e encontra o barbeiro dormindo, ele o acorda.
O algoritmo pode ser descrito conforme abaixo. O método inicia indica processamento concorrente.
1. Programa Principal Barbeiro.inicia ( ) Cliente.inicia ( )
2. Barbeiro.inicia ( … ) enquanto Barbearia.aberta ( ) { Se Clientes.quantidade ( ) = 0 { dorme ( ) } senão { Se Não atendendo ( ) { Clientes.getMutex ( ).lock ( ) Cliente = Clientes.dequeue ( ) Clientes.getMutex ( ).unlock ( ) atende (Cliente) } } }
3. Cliente.inicia ( … ) enquanto Barbearia.aberta ( ) { Se Clientes.quantidade ( ) = Barbearia.capacidade ( ) { sair ( ) } senão { Clientes.getMutex ( ).lock ( ) Clientes.enqueue (this) Clientes.getMutex ( ).unlock ( ) Se Barbeiro.dormindo ( ) { Barbeiro.acorda ( ) } } }
O Problema do Barbeiro Dorminhoco (com threads)
Em ciência da computação, o problema do barbeiro dorminhoco é um problema clássico de comunicação inter-processo e sincronização entre múltiplos processos.
O problema é análogo a manter o barbeiro ocupado enquanto há clientes, e descansando quando não há nenhum (fazendo isso de uma maneira ordenada).
O barbeiro e seus clientes correspondem aos processos mencionados acima.
O problema:
Na barbearia há um barbeiro, uma cadeira de barbeiro em cadeiras para eventuais clientes esperarem a vez. Quando não há clientes, o barbeiro senta-se na cadeira de