Processus Un meilleur verrou -module (block). -export ([lock/1, guard/2]). guard (Owner, N) -> receive {lock, From} when N == 0 -> From ! ok, guard (From, 1); {lock, Owner} -> Owner ! ok, guard (Owner, N+1); {unlock, Owner} when N > 1 -> guard (Owner, N-1); {unlock, Owner} when N == 1 -> unlink (Owner), guard (none, 0); {'EXIT', Owner, _} when N > 0 -> guard (none, 0) end. lock (Lock) -> link (Lock), Lock ! {lock, self()}, receive ok -> ok end. unlock (Lock) -> Lock ! {unlock, self()}.