Skip to content

Instantly share code, notes, and snippets.

@greggy
Created November 29, 2012 17:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save greggy/4170386 to your computer and use it in GitHub Desktop.
Save greggy/4170386 to your computer and use it in GitHub Desktop.
start(ProcNum, MsgNum, Message) ->
start(ProcNum, MsgNum, Message, 0, 0, 1).
start(ProcNum, MsgNum, Message, PrevPid, FirstPid, Num) when ProcNum == Num ->
spawn(ring, loop, [Num, FirstPid, MsgNum, Message]);
start(ProcNum, MsgNum, Message, PrevPid, FirstPid, 1) ->
Pid = spawn(ring, loop, [1, PrevPid, MsgNum, Message]),
start(ProcNum, MsgNum, Message, Pid, Pid, 2),
Pid ! Message;
start(ProcNum, MsgNum, Message, PrevPid, FirstPid, Num) ->
Pid = spawn(ring, loop, [Num, PrevPid, MsgNum, Message]),
start(ProcNum, MsgNum, Message, Pid, FirstPid, Num+1).
%%%===================================================================
%%% Internal functions
%%%===================================================================
loop(Num, Pid, MsgNum, Message) ->
receive
stop ->
print(Num, Message),
stop;
Message ->
print(Num, Message),
[Pid ! Message || _ <- lists:seq(1, MsgNum)],
loop(Num, Pid, MsgNum, Message);
_ ->
{error, invalid_message}
end.
print(Num, Msg) ->
io:format("Process: ~p recieved: ~p~n", [Num, Msg]).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment