我有一个父母有5个子进程.我想向每个子进程发送一个随机变量.每个孩子都会对变量进行平方并将其发送回父母,父母将这些变量加在一起.
这甚至可能吗?我无法弄明白......
编辑:此过程将使用共享内存.
有很多方法可以做到这一点,所有这些都涉及某种形式的进程间通信.您选择哪一个取决于许多因素,但有些因素是:
共享内存.
管道(popen
等).
插座.
一般来说,我可能popen
会在产生孩子之前在父母中进行一些沟通会议; 父母将知道所有五个,但每个孩子可以配置为只使用一个.
共享内存也是可能的,虽然你可能每个孩子都必须有几个值来确保通信顺利进行:
存储变量和返回值的值.
存储状态的值(0 =开始,1 =为子项准备好变量,2 =为父项准备好变量).
在所有情况下,您需要一种方法让孩子们只接受他们的价值观,而不是那些运往其他孩子的价值观.这可能就像向共享内存块添加值以存储子进程的PID一样简单.所有孩子都会扫描块中的每个元素,但只处理状态为1且PID为PID的那些元素.
例如:
Main为五个孩子创建共享内存.每个元素都有状态,PID和值.
Main将所有状态设置为"start".
主要启动五个孩子,他们都附加到共享内存.
Main存储所有PID.
所有孩子都开始扫描共享内存以获取state ="ready for child"及其PID.
Main放入第一个元素(state ="ready for child",PID = pid1,value = 7).
Main放入第二个元素(state ="ready for child",PID = pid5,value = 9).
子pid1获取第一个元素,将值更改为49,将状态设置为"为父母准备"),返回监视.
子pid5拾取第二个元素,将值更改为81,将状态设置为"为父母准备"),返回监视.
主要拿起pid5的回应,将状态设置回"开始".
Main拿起pid1的回应,将状态设置回"开始".
这给出了一个并行度量,每个孩子不断监视共享内存以进行工作,Main将工作放在那里并定期接收结果.