ALGORITMOS: O Barbeiro Dorminhoco

Dando sequência ao nosso estudo em programação concorrente, apressentamos esse desafio.

O Problema do 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 ( )
         }
      }
   }

Anúncios

Os comentários estão desativados.