我在主进程中有一个整数列表。 主进程从该列表中选择一个整数,并将子进程分叉以对其执行某些操作。 子进程完成后,我需要它通知父进程已完成,以便可以重用整数。 可以同时有多个子进程(每个子进程从列表中获取一个唯一的数字)。
思想:
请告诉我更好的方法。
答案 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));
希望它有所帮助。