我想在我的程序中创建一个死锁,但它不起作用(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"。