#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