我试图让 2 个进程同时启动一个任务(例如,计算一个数字)。我设置了 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,为什么会这样呢?我怎样才能解决这个问题?
提前致谢!