タスクで 2 つのプロセスを同時に開始しようとしています (たとえば、数を数えます)。プロセスごとに 1 つずつ、2 つの準備完了フラグを設定し、while ループを実行して、両方のフラグが立っているかどうかを確認します。次に、チェックに合格した後、2 つのプロセスがカウントを開始します。理由がわからない、機能しないコードは次のとおりです。
int p1ready=0;
int p2ready=0;
int onebil = 1000000000;
int main(){
int pid;
int exit_code;
pid=fork();
if(pid==0){
//child1
int count1=0;
p1ready=1; //signal
while(!(p1ready&p2ready))'//wait until 2 processes are both ready
while(count1!=onebil){
count1++;
}
exit(0);
}
else{
pid=fork();
if(pid==0){
//child2
int count2=0;
p2ready=1; //signal
while(!(p1ready&p2ready));//wait until 2 processes are both ready
while(count2!=onebil){
count2++;
}
exit(0);
}
else{
//parent
//do stuff
}
return 0;
}
このコードの問題は、child1 と child2 で、自分の準備完了フラグだけが 1 に設定されていることです。他の子のフラグが設定されているのを確認できません。たとえば、child1 には p1ready=1 しか表示されませんが、p2ready は常に 0 です。なぜそうなるのでしょうか? どうすればこれを修正できますか?
前もって感謝します!