如何在c中与父进程和子进程共享内存

时间:2017-01-27 12:40:17

标签: c linux fork shared-memory

我想用共享内存和CyclicBarrier父进程和子进程来计算阶乘。我的问题是子进程似乎不起作用,我想从父进程给出一个数字,并且在子进程后父母的阶乘结果。但结果与我给出的数字相同。

我被要求使用fork()snprintf()spritnf()itoa(),以便将变量传递给每个流程。

我达到了以下目的:

atoi()

1 个答案:

答案 0 :(得分:2)

你有:

if(fid>0)//parent process
{   
    wait(&status);

父进程做的第一件事是等待孩子死亡。只有这样才会要求输入计算的数字。这不会很好。

您需要父母询问号码,将其写入共享内存,并通过某种(其他)IPC机制告诉孩子该号码已准备就绪。然后孩子应该醒来,读取数字,进行计算,然后写下答案,然后通过退出通知父母完成。同时,父母现在可以等待孩子完成,然后从共享内存中读取答案。

如果是我的代码,我会在致电shmat()之前执行fork()。如上所述,孩子使用shmat()两次(一次在fork()之后,一次在else if (fid == 0)代码中。这不是正统的。

创建key_t key = 1990;然后不使用它很奇怪。我也没有看到使用statusx

作为计算阶乘的一种方法,这是荒谬的。作为IPC和进程间同步的练习,这是一个很好的简单示例。

请记住,32位整数最多只能存储12个值!而64位整数只能存储最多20个值!因此,创建一个阶乘表通常是明智的 - 或者只是动态计算它们。或者你需要使用浮点运算;它需要一段时间才能摆脱它们的范围(大约小于200!,IIRC)。