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