0

好吧,我什至很难考虑如何描述我需要的东西。但这真的很简单。我想生成 n 个生成 n 个 ID 的进程。我有一些简单的递归和打印到终端的工作。我正在苦苦挣扎的地方是创建一个列表,每个生成的进程都可以访问这些进程,我可以在其中积累 id。然后,当这些过程完成后,我需要打印出任何重复项。

我用 ets 表尝试了一些不同的选项,它总是打印一个什么都没有的列表。我想是因为我在流程完成之前就进入了打印功能?我知道我在想这个错误,但非常感谢朝着正确的方向轻推。

4

1 回答 1

1

您需要将主进程与衍生进程同步。您可以通过从每个 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) -> ...
于 2013-11-06T23:14:21.957 回答