【发布时间】:2020-06-08 17:23:21
【问题描述】:
我正在使用 Erlang 中的进程并尝试创建一个简单的计数器进程。 它接收发送者的 PID,增加内部计数器并将新的计数器值发送给发送者。 我从 erl shell (Erlang/OTP 20, Eshell V9.2) 启动我的代码。 而且我能够成功收到来自计数器进程的第一个回复,但不是第二个。
%% Process function that serves as a counter
CounterFun = fun() ->
(fun Receiver(Current) ->
io:format(" -- Entering receiver, current ~p~n", [Current]),
receive
Sender ->
New = Current + 1,
io:format(" -- Sending ~p to ~p~n", [New, Sender]),
Sender ! New,
Receiver(New)
end
end)(0)
end.
CounterPid = spawn(CounterFun).
CounterPid ! self().
receive V -> V after 3000 -> timeout end. % Will provide 1
CounterPid ! self().
receive V -> V after 3000 -> timeout end. % Will result in timeout
【问题讨论】:
标签: erlang erlang-shell