안녕하세요 저는 몇 가지 기본 얼랭 (Erlang) 서버 모듈을 이해하여 얼랭 트레이닝을하고 있습니다. 그러나 나는 이것에 붙어있다. 이 모듈에서는 3 개의 프로세스 (부모 프로세스와 2 개의 자식 프로세스) 각각이 인쇄 할 수있는 가장 낮은 값과 가장 높은 값을 알려주고 있습니다. 실행 순서에 따라 3 개의 프로세스가 다른 값을 인쇄 할 수 있기 때문입니다.얼랭 코드 이해
테스트를 실행하고 부모 프로세스 2 개, 하위 프로세스 프로세스 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} ->
\t Pid ! {value, self(), N},
\t loop(N);
\t {incr, Pid} ->
Pid ! {incr_reply, self()},
\t loop(N+1);
\t {reset, Pid} ->
Pid ! {reset_reply, self()},
\t 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.
\t
test() -> \t
Server = start(),
spawn(fun() -> incr(Server),
\t \t io:format("Child 1 read ~p~n", [read(Server)]) end),
incr(Server),
spawn(fun() -> incr(Server),
\t io:format("child 2 read ~p~n", [read(Server)]) end),
io:format("Parent read ~p~n", [read(Server)]).
\t \t
당신이 말해 줄 수 라인 B가 동일한 프로세스에서 메시지는 발생 후 발송에 실패하는 메시지를 지정에게 전달 될 것입니다 목적지 프로세스가 A? 그리고 왜이 프로세스들 각각이'read '전에'incr'을 보내는가? – user1579701
@ user1579701 모든 프로세스는 read (Server) 전에 incr (Server)을 실행합니다. read/1의 정의를 보라. 스폰 기능은 새로운 프로세스 만 생성합니다. 실행이 완료되거나 함수 실행을 시작하기 전까지 기다리지 않습니다. –
@ user1579701 방금 아동의 읽기 2에 대한 최소값의 경우 내 실수를 발견했습니다. 내 대답을 편집했습니다. –