Skip to content

Instantly share code, notes, and snippets.

@jokea
Created June 20, 2012 04:17
Show Gist options
  • Save jokea/2958099 to your computer and use it in GitHub Desktop.
Save jokea/2958099 to your computer and use it in GitHub Desktop.
Erlang programming ex4_2
-module(ex4_2).
-export([start/3, stop/0, server/1]).
start(M, N, Message) ->
register(first, spawn(?MODULE, server, [N-1])),
send(M, N, Message).
stop() ->
first ! stop,
ok.
send(0, _, _) -> ok;
send(M, N, Message) ->
first ! {N, Message},
send(M-1, N, Message).
%%% server process
server(N) ->
if
N > 0 ->
Next = spawn(?MODULE, server, [N-1]);
true ->
Next = first
end,
run(Next).
run(Pid) ->
receive
{0, _} ->
run(Pid);
{N, Message} ->
io:format("~p~n", [Message]),
Pid ! {N-1, Message},
run(Pid);
stop ->
case Pid of
first -> ok;
_ -> Pid ! stop
end,
ok
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment