【问题标题】:I'd like to create a deadlock in my program but it's not working(C, fork, paralell-programming)我想在我的程序中创建一个死锁,但它不起作用(C、fork、并行编程)
【发布时间】: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


    【解决方案1】:

    s 和 q 不会在父子节点之间共享。孩子制作一个副本,然后继续使用不同的变量运行。

    因为这些不共享变量,所以您永远不会真正对小于或等于 0 的值调用“down”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      相关资源
      最近更新 更多