子プロセスを作成したプログラムを作成しました。親プロセスと子プロセスの両方が、parent_part1、parent_part2 と child_part1、child_part2 の 2 つの部分で計算を行います。
私の目的は、(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 回実行することを ONE SUCCESSFUL 計算と定義し、最終的な正しい値を表示します。
そのような 100 SUCCESSFUL 計算を見つけたいのですが、同じ目的で OUTER ループ (つまり、 while(t1++<100) ) を使用しましたが、100 回の SUCCESSFUL 計算が得られず、時々 40 SUCCESSFUL の結果が得られ、ハングしました。 parent_part1 または parent_part2 または child_part1 または child_part2 などの後、また 20 または 95 の成功した結果を得て、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;
}