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

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

谢谢

【问题讨论】:

  • 请编辑你的问题的标题,这是关于分叉的,共享内存似乎只是它的外围设备。

标签: c ipc fork


【解决方案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 标签不见了,不是吗?
    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多