Modelize um sistema distribuído, apresentando o modelo operacional e de setup, respeitante à seguinte descrição:
Desenvolva outro módulo para uma estrutura em anel, ou seja, cada nó recebe uma mensagem do anterior e envia para o seguinte. O processo repete-se n vezes e termina com a mensagem de fim.
Escreva um módulo em Erlang respeitante ao modelo anterior.

-module(exercicio9).
-export([anel/2, no_anel/1]).
anel(N_msg, M_nos) ->
% como este proprio processo conta como no,
% entao apenas se criam M - 1 processos
Pid_seguinte = criar_nos_anel( M_nos - 1, self() ),
enviar_msgs_anel( N_msg, Pid_seguinte ).
criar_nos_anel( 0, Pid_seguinte ) ->
Pid_seguinte;
criar_nos_anel( M, Pid_seguinte ) ->
Pid_anterior = spawn( ?MODULE, no_anel, [ Pid_seguinte ] ),
criar_nos_anel( M-1, Pid_anterior ).
no_anel( Pid_seguinte ) ->
receive
hello ->
Pid_seguinte ! hello,
io:format("msg. hello para ~w~n", [Pid_seguinte]),
no_anel( Pid_seguinte );
fim ->
% termina processo
Pid_seguinte ! fim,
io:format("terminar ~w~n",[self()])
end.
enviar_msgs_anel( 0, Pid_seguinte ) ->
enviar_msg_anel_fim( Pid_seguinte );
enviar_msgs_anel( N, Pid_seguinte ) ->
Pid_seguinte ! hello,
receive
hello ->
enviar_msgs_anel( N-1, Pid_seguinte )
end.
enviar_msg_anel_fim( Pid_seguinte ) ->
Pid_seguinte ! fim,
receive
fim ->
io:format("todos terminaram~n",[])
end.
Última actualização: 18-05-2000