Skip to content

Instantly share code, notes, and snippets.

@vamsee
Created March 1, 2010 17:10
Show Gist options
  • Save vamsee/318569 to your computer and use it in GitHub Desktop.
Save vamsee/318569 to your computer and use it in GitHub Desktop.
-module(ring_bmark).
-export([start/3]).
start(Msg, N, M) ->
Pid = spawn(fun() ->
transmitter() end),
Pid ! { Msg, {nodes, N}, {times, M}}.
transmitter() ->
receive
{Msg, {nodes, N}, {times, M}} ->
io:format("Setting up transmitter with ~p nodes...", [N]),
To = setup_ring(self(), 1, N),
io:format("done. ~nI should send to ~p ~p times~n", [To, M]),
io:format("~p: Sending ~p to ~p~n", [self(), Msg, To]),
for(To, self(), Msg, 1, M),
transmitter();
{From, Msg} ->
io:format("~p: Received ~p from ~p, Stop!~n", [self(), Msg, From]),
transmitter();
die -> void
end.
for(To, From, Msg, Max, Max) ->
To ! {From, Msg};
for(To, From, Msg, I, Max) ->
To ! {From, Msg},
for(To, From, Msg, I+1, Max).
setup_ring(F, N, N) ->
spawn(fun() ->
transponder(F) end);
setup_ring(F, I, N) ->
setup_ring(spawn(fun() ->
transponder(F) end), I+1, N).
transponder(To) ->
receive
{From, Msg} ->
io:format("~p: Received ~p, from ~p, sending to ~p~n",
[self(), Msg, From, To]),
To ! {self(), Msg},
transponder(To);
die -> To ! die,
void
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment