某人在QQ上问的问题:
进程0 发送一个整数给进程1;进程1 将该数加1,传递给进程2;进程2 再将该数加1,再传递给进程3;依次类推,最后,进程P-1 将该数传递给进程0,由进程0 负责广播该数给所有进程,并打印输出 。
Erlang的实现:
-module(test_p).
-export([start/1, send/1]).
for_spawn(0, Pid) ->
spawn(fun()->loop(Pid) end);
for_spawn(N, Pid) ->
Pnext = spawn(fun()->loop(Pid) end),
for_spawn(N-1, Pnext).
start(P)->
P0 = spawn(fun() -> loop(self()) end),
register(p0,P0),
P1 = for_spawn(P, p0),
p0 ! {P1}.
send(N) -> p0 ! {send, N}.
loop(Pid_next)->
receive
{number, N} ->
P0 = get(the_p0),
case self() of
P0 ->
io:format('Result:~p~n', [N]);
_ ->
Pid_next ! {number, N + 1}
end;
{send, N} ->
Pn = get(pid_next),
Pn ! {number, N};
{Pid} ->
put(the_p0, self()),
put(pid_next, Pid)
end,
loop(Pid_next).
Recent comments
2 weeks 3 days ago
2 weeks 4 days ago
6 weeks 2 days ago
7 weeks 1 day ago
7 weeks 2 days ago
8 weeks 3 days ago
8 weeks 3 days ago
8 weeks 4 days ago
10 weeks 22 hours ago
10 weeks 3 days ago