我想在我的程序中创建一个死锁,但它不起作用(C、fork、并行编程)
I'd like to create a deadlock in my program but it's not working(C, fork, paralell-programming)
我想在 down(&s) 之后创建一个死锁;
printf("c s %d\n",s);
它应该是在关闭后卡住的(&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;
}
s 和 q 未在 parent 和 child 之间共享。 child 创建一个副本,然后使用不同的变量继续 运行。
因为它们不共享变量,所以您实际上永远不会对小于或等于 0 的值调用 "down"。
我想在 down(&s) 之后创建一个死锁; printf("c s %d\n",s);
它应该是在关闭后卡住的(&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;
}
s 和 q 未在 parent 和 child 之间共享。 child 创建一个副本,然后使用不同的变量继续 运行。
因为它们不共享变量,所以您实际上永远不会对小于或等于 0 的值调用 "down"。