【发布时间】:2015-12-01 12:35:50
【问题描述】:
这是场景,我的父进程有一个范围 (a,b) 和一个数字 N。我想计算 (a,b) 之间的所有素数。但是处理部分是由N个子进程完成的。
所以,我创建一个管道,然后将范围划分为 N 个部分。(a1,b1) ... (an,bn)。然后我创建 N 个子进程。然后在父进程中,我将每个范围顺序写入写完。
问题来了,如果只有一个子进程,我可以遵循answer。如果多个进程试图写入管道,this 答案是可以接受的。 但是这里有多个进程正在尝试读取,而一个进程正在尝试从管道中读取,应该一个接一个地读取两个整数,所以这部分应该是原子的。也许我可以尝试使用 mutex ,但不知道如何将 mutex 用于进程间。我该如何实现?
【问题讨论】:
-
为什么不创建 N 个管道,每个孩子一个?但是等等,如果您在孩子之前创建范围,那么他们已经知道范围。你需要管道做什么?
-
我必须使用管道和信号进行通信......
-
不,你没有。 (断言证明)
-
这是一个管道和信号分配,我正在学习如何使用这些东西。
-
如果您在单个
write()操作中在管道上写入每对int值,并且如果每个孩子在单个read()中从管道中读取一对int值操作,那么您无需担心任何问题。如果您将读取或写入拆分为两个操作(对中的每个成员一个),那么您会遇到原子性问题。但如果你像描述的那样小心,就不会。
标签: c linux pipe systems-programming multiprocess