【发布时间】:2015-02-25 03:44:00
【问题描述】:
您好,我正在通过了解一些基本的 Erlang 服务器模块来进行一些 Erlang 培训。但是我被困在这个问题上。在这个模块中,我应该告诉 3 个进程(父进程和 2 个子进程)中的每一个可以打印的最低和最高可能值,因为根据特定的执行顺序,3 个进程可能会打印不同的值。
我执行了测试,得到了 2 个父进程,3 个子进程,但我不知道他们是如何得到这些值的。有人可以具体向我解释一下这个过程吗?赞赏。
这是模块:
-module(p4).
-export([start/0, init/0, read/1, incr/1, reset/1, test/0]).
start()->
spawn(fun() -> init() end).
init() -> loop(0).
loop(N) ->
receive
{read, Pid} ->
Pid ! {value, self(), N},
loop(N);
{incr, Pid} ->
Pid ! {incr_reply, self()},
loop(N+1);
{reset, Pid} ->
Pid ! {reset_reply, self()},
loop(0)
end.
read(Serv) ->
Serv ! {read, self()},
receive {value, Serv, N} -> N end.
incr(Serv)->
Serv ! {incr, self()},
receive{incr_reply, Serv} -> ok end.
reset(Serv) ->
Serv ! {reset, self()},
receive {reset_reply, Serv} -> ok end.
test() ->
Server = start(),
spawn(fun() -> incr(Server),
io:format("Child 1 read ~p~n", [read(Server)]) end),
incr(Server),
spawn(fun() -> incr(Server),
io:format("child 2 read ~p~n", [read(Server)]) end),
io:format("Parent read ~p~n", [read(Server)]).
【问题讨论】:
标签: erlang concurrent-programming