多个分叉进程之间的共享列表(C)

时间:2014-06-14 08:37:17

标签: security multiprocessing fork pipe share

我在主进程中有一个整数列表。 主进程从该列表中选择一个整数,并将子进程分叉以对其执行某些操作。 子进程完成后,我需要它通知父进程已完成,以便可以重用整数。 可以同时有多个子进程(每个子进程从列表中获取一个唯一的数字)。

思想:

  1. 使用保存数字的常规文件,父母可以从文件中删除一个数字,孩子可以将其插回(不需要排序)[这是一种安全/安全的方式吗?]。
  2. 使用烟斗[每个孩子需要一个单独的烟斗吗?]
  3. 共享内存?
  4. 请告诉我更好的方法。

1 个答案:

答案 0 :(得分:0)

我会在这里使用一个pipe(2),每个孩子一个,因为管道是......好吧它是一个管道,数据只能在一个预定的方向上流动(你需要每个孩子两个管道来获得一个双向沟通)。

管道的使用和管理非常简单,而不是共享内存,这个概念更直接。

不要在磁盘上使用文件。管道是可行的方法。

使用poll(2)等待来自任何主进程'子级的任何新数据。您需要为主进程中的每个管道(读取端)文件描述符请求POLLIN事件。当孩子关闭其管道(写入侧)文件描述符时,您的poll()调用将取消阻止,并为该子项返回POLLHUP个事件。这是您的“子X已完成”信号,因此您可以从轮询列表中删除其条目,并且其整数可以再次免费使用。

如果您需要从孩子那里得到一些结果(我不确定),poll()应该为POLLIN返回的事件取消阻止,以便任何孩子将数据写入其管道。然后主要过程可能来自管道read(2)

儿童可以write(2)得到的整数与管道一致:

int some_result;

/* ... */

write(pipefd[1], &some_result, sizeof(some_result));

希望它有所帮助。