2016-09-30 89 views
0
main(){ 
    int child = fork(); 
    int c = 5; 
    if(child == 0){ 
     sleep(1000); 
     c += 5; 
    } else{ 
     child = fork(); 
     c += 10; 
     if(child) 
      c += 5; 
    } 
} 

我试过了什么?在下面的代码中,C可能的值是什么?

IF和ELSE块将并行执行。 因此,当控制进入IF块时,孩子将进入睡眠状态,但父母将开始执行并分为2个进程,这两个进程都执行C并使C = 15。现在,父进程只能输入如果(子)使C = 20的值。

现在,子进程被唤醒,并使得c = 10. 因此,C的可能值是10,15,20。

我的理解是否正确?

+1

我插入缺少'{'和'}':请回滚,如果我把它们放在不正确的地方。在此之前,你的代码不会编译。 – Bathsheba

+0

它是10,15和20,'sleep()'与它无关。 –

+0

但是在else块中,fork和fork之后的父和子都会执行c + = 10,所以,这两个值是否会相同? – Garrick

回答

1

,C的可能的值有10,15,20。你的理解(推理)是绝对正确的。

您甚至可以通过执行此代码来验证您的答案。

输出在我的笔记本电脑:

5 
15 
20 
15 
10