C: 多个分叉

Posted

技术标签:

【中文标题】C: 多个分叉【英文标题】:C: Multiple forks 【发布时间】:2010-07-08 20:22:12 【问题描述】:

我需要使用共享内存和 fork 来执行此操作: 使用 4 个进程和共享内存将随机 512x512 矩阵相乘。 我知道如何分叉一个孩子,但是 我如何分叉 4 个完成 1/4 工作的进程?

谢谢

【问题讨论】:

请编辑你的问题的标题,这是关于分叉的,共享内存似乎只是它的外围设备。 【参考方案1】:
ct = 0;
while (ct < 3 && fork() == 0) 
    ct++;

ct 会告诉你你是哪个线程。不过,您可能应该检查-1 是否从fork() 返回。

【讨论】:

我不明白的是3!为什么我们总是 fork 比所需进程数少一个?为什么是 3 而不是 4? 第一个是0,第二个是1,第三个是2,2个fork的时候那个(第4个)变成3,把while语句短路不再fork . @Snigger:您从一开始就已经拥有一个进程,因此您只需启动缺少的另外 3 个进程。 所以我应该在原来的过程中做1/4的工作?和孩子的 3/4? @Snigger:分叉后,原版和子版之间没有真正的区别。只需在四个过程中的每一个中完成 1/4 的工作,然后(可能)将结果合并到其中一个中。【参考方案2】:

怎么样:再读一遍教科书上的章节,向你的同学询问你错过的笔记,在他或她偷偷溜出办公室时攻击你的助教,然后在他们的办公时间问你的教授!

【讨论】:

【参考方案3】:

为什么不连续分叉三次?

【讨论】:

您还需要以某种方式与分叉的进程进行通信,他们需要执行哪组处理。虽然不是火箭科学,但 Borealid 的回答提供了一个不错、优雅的方法。 @Micheal:当然,只是认为他可以自己解决这个问题,或者以更准确的方式重新表述他的问题。猜猜homework 标签不见了,不是吗?

以上是关于C: 多个分叉的主要内容,如果未能解决你的问题,请参考以下文章

在一个父母中分叉多个孩子

一页上有多个 WMD 编辑器(SO 分叉版)?

C 服务器程序无法分叉

分叉和传递套接字c ++

当我从 c 中的一个分叉的孩子执行()时会发生啥

使用分叉 ShowcaseView 项目库的 CastVideo-Android 示例无法在 ActionBar 中使用多个图标