我想測試用Erlang編寫的互斥量信號量。導出的功能是:如何測試Erlang互斥信號量與多個Pid?
- start/0, - >啓動互斥服務器。
- stop/0, - >停止互斥服務器。
- wait/0, - >使信號量處於繁忙狀態。
- signal/0, - >釋放信號量。
然後,從一個Erlang控制檯:
mutex:start().
mutex:wait().
如何執行另一個互斥:等待()來測試信號?
我試圖創建2個Erlang節點(erl -sname
),並使用rpc:call(node, mutex, wait, [])
我能做到這一點,但是當我嘗試的信號 - rpc:call(node, mutex, signal, [])
- 它創造另一個的Pid從一個讓等待通話不同,因此該信號是永遠不會釋放。
感謝您的幫助。謝謝!。
這是代碼,如果需要的*從Erlang編程書*
-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.
關閉我的頭頂聽起來oxymoronic :) – EvilTeach 2011-01-13 22:17:53
希望大多數來自我的頭。 :-) – rvirding 2011-01-15 23:22:27