2010-07-08 76 views
0

我需要使用共享内存和叉来执行此操作:
使用4个进程和共享内存将多个随机512x512矩阵相乘。
我知道如何分娩一个孩子,但
我如何分岔4个工作做四分之一的工作?C:多支叉

谢谢

+0

请编辑您的问题的标题,这是关于fork,共享内存只是看起来像它的外围。 – 2010-07-08 20:42:48

回答

3
ct = 0; 
while (ct < 3 && fork() == 0) { 
    ct++; 
} 

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

+0

我不明白的是3! 为什么总是分叉一个少于所需的进程数? 为什么3而不是4? – RYN 2010-07-08 20:38:52

+0

第一个是0.第二个是1.第三个是2.当2叉时,那个(第四个)变成3,并且短路while语句以不再分叉。 – Borealid 2010-07-08 20:40:18

+1

@Sigger:你从一开始就拥有一个过程,所以你只需要启动其他3个过程。 – 2010-07-08 20:41:19

0

为什么你不只是连续三次叉?

+0

您还需要以某种方式与分叉进程进行通信,以处理他们需要执行的处理。虽然不是火箭科学,但Borealid的答案提供了一个很好的,优雅的方法。 – 2010-07-08 22:42:17

+0

@Micheal:当然,只是认为他可以自己想出来或者以更精确的方式重述他的问题。猜猜'家庭作业'标签丢失了,不是吗? – 2010-07-09 05:16:30

1

怎么样:再次阅读教科书中的章节,向同学们索取你错过的笔记,在他偷偷溜出办公室的同时攻击你的助教,然后在办公时间问问你的教授!