好吧,我什至很难考虑如何描述我需要的东西。但这真的很简单。我想生成 n 个生成 n 个 ID 的进程。我有一些简单的递归和打印到终端的工作。我正在苦苦挣扎的地方是创建一个列表,每个生成的进程都可以访问这些进程,我可以在其中积累 id。然后,当这些过程完成后,我需要打印出任何重复项。
我用 ets 表尝试了一些不同的选项,它总是打印一个什么都没有的列表。我想是因为我在流程完成之前就进入了打印功能?我知道我在想这个错误,但非常感谢朝着正确的方向轻推。
好吧,我什至很难考虑如何描述我需要的东西。但这真的很简单。我想生成 n 个生成 n 个 ID 的进程。我有一些简单的递归和打印到终端的工作。我正在苦苦挣扎的地方是创建一个列表,每个生成的进程都可以访问这些进程,我可以在其中积累 id。然后,当这些过程完成后,我需要打印出任何重复项。
我用 ets 表尝试了一些不同的选项,它总是打印一个什么都没有的列表。我想是因为我在流程完成之前就进入了打印功能?我知道我在想这个错误,但非常感谢朝着正确的方向轻推。
您需要将主进程与衍生进程同步。您可以通过从每个 id 生成器进程向主进程发送消息来做到这一点,后者将等待所有进程报告。
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) -> ...