Processus Lock/Unlock -module (lock). -export ([create/0, lock/1, unlock/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 > 0 -> guard (Owner, N-1) end. create () -> spawn (?MODULE, guard, [none, 0]). lock (Lock) -> Lock ! {lock, self()}, receive ok -> ok end. unlock (Lock) -> Lock ! {unlock, self()}.