当前位置:  开发笔记 > 编程语言 > 正文

如何使用共享内存使多个`fork()`-ed进程通信?

如何解决《如何使用共享内存使多个`fork()`-ed进程通信?》经验,为你挑选了1个好方法。

我有一个父母有5个子进程.我想向每个子进程发送一个随机变量.每个孩子都会对变量进行平方并将其发送回父母,父母将这些变量加在一起.

这甚至可能吗?我无法弄明白......

编辑:此过程将使用共享内存.



1> paxdiablo..:

有很多方法可以做到这一点,所有这些都涉及某种形式的进程间通信.您选择哪一个取决于许多因素,但有些因素是:

共享内存.

管道(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将工作放在那里并定期接收结果.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有