2016-09-30 88 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