【发布时间】:2015-10-07 22:42:28
【问题描述】:
我正在尝试理解 erlang 中的请求顺序,但我似乎无法很好地掌握它。下面是示例代码:
test() ->
Server = start(),
spawn(fun() -> write(Server, 2),
io:format(”Child 1 read ~p~n”, [read(Server)]) end),
write(Server, 3),
write2(Server, 5),
spawn(fun() -> write2(Server, 1),
io:format(”Child 2 read ~p~n”, [read(Server)]) end),
io:format(”Parent read ~p~n”, [read(Server)]).
这是服务器:
start() ->
spawn(fun() -> init() end).
init() -> loop(0).
loop(N) ->
receive
{read, Pid} ->
Pid ! {value, self(), N},
loop(N);
{write, Pid, M} ->
Pid ! {write_reply, self()},
loop(M);
{write2, _Pid, M} -> loop(M)
end.
read(Serv) ->
Serv ! {read, self()},
receive {value, Serv, N} -> N end.
write(Serv, N) ->
Serv ! {write, self(), N},
receive {write_reply, Serv} -> ok end.
write2(Serv, N) ->
Serv ! {write2, self(), N},
ok.
我知道test/0 中创建的三个不同进程可以打印不同的值,但我试图找出Parent、Child1 和@ 可以打印的最低和最高值987654326@ 进程。答案是:
-
Parent:最低1,最高5 -
Child1:最低1,最高5 -
Child2:最低1,最高2
谁能解释一下?
【问题讨论】: