type semaphore = (n : entier; l : liste de processus);manipulée uniquement par les actions atomiques
wait
et signal
.
procedure wait(var S : semaphore) procedure signal(var S : semaphore) debut debut S.n := S.n - 1; S.n := S.n + 1; si (S.n < 0) alors debut si (S.n <= 0) alors debut ajouter(moi,S.l); enlever(P,S.l); block; wakeup(P); fin fin fin fin