Ich möchte einen Mutex-Semaphor in Erlang geschrieben testen. Die exportierten Funktionen sind:Wie kann ich einen Erlang Mutex Semaphor mit mehr als einem Pid testen?
- start/0, -> Um den Mutex-Server zu starten.
- stop/0, -> Um den Mutex-Server zu stoppen.
- wait/0, -> Um das Semaphor in den aktiven Zustand zu versetzen.
- signal/0, -> Um den Semaphor zu befreien.
Dann Von einer erlang Konsole:
mutex:start().
mutex:wait().
Wie führe ich eine andere Mutex: wait() die Semaphore zu testen?
Ich habe versucht, die Schaffung 2 erlang Knoten (erl -sname
) und unter Verwendung rpc:call(node, mutex, wait, [])
ich das tun kann, aber wenn ich versuche, das Signal - rpc:call(node, mutex, signal, [])
- es schafft eine andere Pid unterscheidet sich von dem, der die Wartezeit Anruf tätigt, so die Semaphore nie freigesetzt wird .
Schätzen Sie Ihre Hilfe. Vielen Dank!.
Dies ist der Code benötigt, wenn * Von Erlang Programming Buch *
-module(mutex).
-export([start/0, stop/0]).
-export([wait/0, signal/0]).
-export([init/0]).
start() ->
register(mutex, spawn(?MODULE, init, [])).
stop() ->
mutex ! stop.
wait() ->
mutex ! {wait, self()},
receive ok -> ok end.
signal() ->
mutex ! {signal, self()},
ok.
init() ->
free().
free() ->
receive
{wait, Pid} ->
Pid ! ok,
busy(Pid);
stop ->
terminate()
end.
busy(Pid) ->
receive
{signal, Pid} ->
free()
end.
terminate() ->
receive
{wait, Pid} ->
exit(Pid, kill),
terminate()
after
0 -> ok
end.
Von der Spitze meines Kopfes klingt es oxymoronic :) – EvilTeach
Hoffentlich kommt die meisten aus meinem Kopf. :-) – rvirding