Jeżeli wszystkie stoliki są zajęte (czyli utables=0), nowo przybywający goście muszą poczekać w kolejce na zwolnienie stolika.
Jeżeli klient zwolni stolik, kelner wyliczy w pamięci nową wartość utables=utables+1. Jeżeli kolejny gość czeka na stolik i przynajmniej jeden stolik jest dostępny, kelner ulokuje jego/ją przy tym stoliku i ponownie wyliczy nową wartość utables=utables-1. Ostatecznie wszyscy goście opuszczą lokal i kolejne obliczenia wartości utables dadzą wartość utables=tables – restauracja jest znowu pusta.
Rodzaje semaforów binarny ogólny rozdzielny (split semaphore) silny słaby z aktywnym czekaniem (busy-wait semaphore) z kolejką oczekujących ze zbiorem oczekujących
Zastosowania Najczęstszym zastosowaniem jest synchronizacja dostępu do zasobów systemowych współdzielonych przez kilka zadań, aby zapobiec problemom wynikającym z prób jednoczesnego dostępu i modyfikacji danego zasobu.
Semafory są zwykle implementowane w obszarze jądra systemu operacyjnego.