Какими могут быть возможные значения C в следующем коде?

#operating-system #fork

#операционная система #fork

Вопрос:

 main(){
    int child = fork();
    int c = 5;
    if(child == 0){
       sleep(1000);
        c  = 5;
    } else{
        child = fork();
        c  = 10;
        if(child)
            c  = 5;
    }
}
  

Что я пробовал?

Блоки IF и ELSE будут выполняться параллельно. Итак, когда элемент управления вводит блок IF, дочерний элемент переходит в спящий режим, но родительский элемент запускает выполнение и разветвляется на 2 процесса, оба из которых выполняют C и делают C = 15. Теперь родительский элемент может вводить только If (дочерний элемент) и будет принимать значение C = 20.

Теперь дочерний процесс просыпается и делает c = 10. Итак, возможные значения C равны 10,15,20 .

Правильно ли я понимаю?

Комментарии:

1. Я вставил отсутствующий { и } : пожалуйста, откатите, если я поместил их в неправильное место. До этого ваш код не компилировался.

2. Это 10, 15 и 20 и sleep() не имеет к этому никакого отношения.

3. Но в блоке else, как родительском, так и дочернем после fork, будет выполняться c = 10, поэтому значение изменится и будет одинаковым для обоих.

4. Почему бы вам не вставить несколько printf s и не протестировать это самостоятельно?

Ответ №1:

Да, возможные значения C — 10, 15, 20. Ваше понимание (рассуждения) абсолютно правильное.

Вы даже можете проверить свой ответ, выполнив этот код.

вывод на моем ноутбуке:

 5
15
20
15
10