【发布时间】:2019-05-14 21:26:55
【问题描述】:
我想在 down(&s); 之后创建一个死锁; printf("c s %d\n",s);
它应该在 down(&s) 后卡住; printf("c s %d\n",s);我不知道为什么不。所以我想请求一些帮助。
void down(int *s){
while(*s<0 || *s==0){;}
*s=*s-1;
}
void up(int *q){
*q=*q+1;
}
int main(){
int p,pid;
int s=1,q=1;
if ((pid = fork()) == 0){
down(&q);
printf("c q %d\n",q);
sleep(1);
down(&s);
printf("c s %d\n",s);
sleep(1);
printf("child\n");
up(&q);
printf("c q %d\n",q);
sleep(1);
up(&s);
printf("c s %d\n",s);
sleep(1);
}
else{
down(&s);
printf("p s %d\n",s);
sleep(1);
down(&q);
printf("p q %d\n",q);
sleep(1);
printf("parent\n");
up(&s);
printf("p s %d\n",s);
sleep(1);
up(&q);
printf("p q %d\n",q);
sleep(1);
}
return 0;
}
【问题讨论】:
标签: c unix parallel-processing fork deadlock