我想测试用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