我编写了一个程序,在其中创建了一个子进程。父进程和子进程都在两部分进行计算 - parent_part1,parent_part2 和 child_part1,child_part2。
我的目标是运行 (parent_part1,child_part1,parent_part2 ,child_part2) 序列让我们说 5 次。为此,我使用了 while(var_child++<10) 和 while(var_par++<10) 并成功实现了它。
现在,我将定义一个成功的计算是执行 (parent_part1,child_part1,parent_part2 ,child_part2) 序列 5 次并显示最终的正确值。
我想找到这样的 100 SUCCESSFUL 计算,出于同样的目的,我使用了 OUTER 循环(即 while(t1++<100) ),但我没有得到 100 次 SUCCESSFUL 计算,有时我得到 40 SUCCESSFUL 结果,然后挂了在 parent_part1 或 parent_part2 或 child_part1 或 child_part2 等之后以及其他一些时候我得到 20 或 95 SUCCESSFUL 结果,并在 parent_part1 或 parent_part2 或 child_part1 或 child_part2 等之后挂起。
是什么原因以及如何克服呢?先感谢您 。程序如下。
#include<stdio.h>
#include<signal.h>
int flagp=0,flagc=0,var_child=0,var_par=0;
void write_child()
{
if(flagc==0)
{
/* do some computation here*/
printf("Child_part1 \n");
flagc=1;
}
else
{
/* do some computation here*/
flagc=0;
printf("Child_part2 \n");
}
}
void write_parent()
{
if(flagp==0)
{
/* do some computation here*/
printf("Parent_part1 \n");
flagp=1;
}
else
{
/* do some computation here*/
printf("Parent_part2 \n");
flagp=0;
}
}
int main(int ac, char **av)
{
printf("Starting...\n");
int t1=0;
pid_t childpid = fork();
printf("childpid=%d,getppid()=%d \n",childpid,getppid());
while(t1++<100)
{
var_child=0;
var_par=0;
if ( childpid == 0 )
{
// child process
printf("\n\nt1=%d ",t1);
while(var_child++<10)
{
kill(getppid(), SIGCONT); //sending singal to parent
signal(SIGCONT, write_child);
pause();
}
}
else
{
//parent process
printf("\n\nt1=%d ",t1);
while(var_par++<10)
{
kill(childpid, SIGCONT); //sending singal to child
signal(SIGCONT, write_parent);
pause();
}
} // end of else
}
return 0;
}