Я хотел бы создать тупик в моей программе, но он не работает (C, Fork, Paralell-программирования) - PullRequest
1 голос
/ 15 мая 2019

Я бы хотел создать тупик после дауна (& 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;
}

1 Ответ

2 голосов
/ 15 мая 2019

s и q не распределяются между родителем и ребенком.Дочерний делает копию, затем продолжает работать с другой переменной.

Поскольку они не имеют общей переменной, вы никогда не вызовете «down» для переменной, которая меньше или равна 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...