Modelize um sistema distribuído, apresentando o modelo operacional e de setup, respeitante à seguinte descrição:
O nó central envia n mensagens a m nós criados dinamicamente (aquando do arranque). O nó central envia uma mensagem "hello" e recebe uma outra "hello" do nó. Repete o processo n vezes. Quando terminarem estas mensagens, o nó central envia uma mensagem de término "fim" a cada um dos outros nós, que os fará sair "graciosamente".
Escreva um módulo em Erlang respeitante ao modelo anterior.

-module(exercicio8).
-export([start/2,node/1]).
start(NMsg,NProc) ->
Pids=criar_nodes(NProc),
enviar_mensagens(NMsg,Pids),
enviar_mensagem_fim(Pids).
criar_nodes(NProcs) ->
criar_nodes(NProc,[]).
criar_nodes(0,Pids) ->
Pids;
criar_nodes(N,Pids) ->
P=spawn(exercicio8,node,[self()]),
criar_nodes(N-1,[P|Pids]).
enviar_mensagens(0,_) ->
ok;
enviar_mensagens(NMsg,Pids) ->
envia_para_todos(Pids),
enviar_mensagens(NMsg-1,Pids).
envia_para_todos([]) ->
ok;
envia_para_todos([P|Pids]) ->
P ! ola,
receive
{P,ola} -> ok
end,
envia_para_todos(Pids).
enviar_mensagem_fim([]) ->
ok;
enviar_mensagem_fim([P|Pids]) ->
P ! fim,
receive
{P,'ok fim'} -> ok
end,
enviar_mensagem_fim(Pids).
node(Pids_start) ->
receive
ola ->
Pid_start ! {self(),ola},
node(Pid_start);
fim ->
Pid_start ! {self(),'ok fim'}
end.

Última actualização: 18-05-2000