Barbeiro
Barbeiro Dorminhoco
Barbeiro Dorminhoco
Barbeiro Dorminhoco
• Se n˜ao h´a clientes, o barbeiro adormece;
• Se a cadeira do barbeiro estiver livre, um cliente pode ser atendido imediatamente;
• O cliente espera pelo barbeiro se houver uma cadeira de espera vazia.
• Se n˜ao tive onde sentar, o cliente vai embora...
Cadeiras da sala de espera
• Se n˜ao tiver onde sentar, o cliente vai embora...
• Esta abordagem funciona? semaforo cadeiras = 5; wait(cadeiras); Cadeiras da sala de espera
• Esta abordagem funciona? semaforo cadeiras = 5; if (sem_getvalue(cadeiras) > 0) wait(cadeiras); Cadeiras da sala de espera sem_t mutex; int cadeiras = 5; wait(mutex); if (cadeiras > 0) cadeiras--; signal(mutex); entra_na_barbearia(); else signal(mutex); desiste_de_cortar_o_cabelo();
Clientes s´ o esperam nas cadeiras semaforo cadeiras = 5; if (trywait(cadeiras) == 0) entra_na_barbearia(); else desiste_de_cortar_o_cabelo(); Disputa pela cadeira do barbeiro semaforo cadeiras = 5; semaforo cad_barbeiro = 1; if (trywait(cadeiras) == 0) wait(cad_barbeiro); • Todo cliente precisa passar pela sala de espera?
Disputa pela cadeira do barbeiro semaforo cadeiras = 5; semaforo cad_barbeiro = 1; if (trywait(cad_barbeiro) == 0) if (trywait(cadeiras) == 0) wait(cad_barbeiro); • Esta abordagem ´e justa?
Iniciando o corte semaforo cadeiras = 5; semaforo cad_barbeiro = 1; if (trywait(cadeiras) == 0) wait(cad_barbeiro); • Como avisar o barbeiro que vocˆe est´a esperando?
Iniciando o corte semaforo cadeiras = 5; semaforo cad_barbeiro = 1; if (trywait(cadeiras) == 0) wait(cad_barbeiro); • Como avisar o barbeiro que vocˆe est´a esperando?
Iniciando o corte semaforo cadeiras = 5; semaforo cad_barbeiro = 1; semaforo cliente_cadeira = 0; if (trywait(cadeiras) == 0) wait(cad_barbeiro); signal(cliente_cadeira);
• E os outros clientes?
Cortando o cabelo semaforo cadeiras = 5; semaforo cad_barbeiro = 1; semaforo cliente_cadeira = 0;