好的,我甚至很难想到如何描述我需要的东西。但它真的很简单。我想生成n个生成n个ID的进程。我有一些简单的递归和打印到终端。我正在努力创建一个列表,可以访问每个生成的进程,我可以在其中累积id。然后,当进程完成时,我需要打印出任何重复的内容。
我尝试了一些与ets表不同的选项,它总是打印一个没有列表的列表。我推测是因为我在流程完成之前就开始了打印功能?我知道我在想这个错误,但我会非常感谢在正确的方向上轻推。
答案 0 :(得分:1)
您需要将主进程与生成的进程同步。您可以通过从每个id生成器进程向main发送消息来实现,后者将等待所有进程报告。
master(N) ->
%% we need a pid of this process for the slaves to send messages to
Self = self(),
%% spawn slave processes and save their pids
Pids = [spawn(fun() -> slave(Self) end || lists:seq(1, N)],
%% receive id message from each of the slave processes
Ids = [recv_id(Pid) || Pid <- Pids],
%% do whatever we want with the data here
find_duplicates(Ids).
slave(Master) ->
Id = mk_id(),
%% send a message to the master
Master ! {id, self(), Id}.
recv_id(Pid) ->
receive
{id, Pid, Id} -> Id
end.
mk_id() -> ...
find_duplicates(Ids) -> ...