2014-10-05 27 views
0

對於下面,我想知道在下面的情況下會發生什麼:下面的僞代碼是否有互斥,無限期延期,兩者都不是?

//global declarations 
Boolean in1=false, in2=false; 
Process P1:: 
while(1){ 
    //entry protocol 
    while(in2){ 
    in1=true; 
    } 
    //--critical section -- 
    //exit protocol 
    in1=false; 
} 
Process P2:: 
while(1){ 
    //entry protocol 
    in2=true; 
    while(in1){ 
    in2=true; 
    } 
    //--critical section -- 
    //exit protocol 
    in1=false; 
} 

只是有點此刻這個難倒,因爲我認爲它只是缺乏相互排斥 - 但只是想確保!

+0

相互排斥是由OS提供的設施 - 所以沒有它不 – 2014-10-05 03:00:52

+0

在我看來,它只有數據種族和未定義的行爲。 – 2014-10-05 03:18:09

+0

要實現互斥,請使用mutex()工具,爲這兩個代碼的關鍵部分使用相同的互斥體名稱。否則,如@R所述,結果將是數據競爭和未定義的行爲。 – user3629249 2014-10-05 07:56:48

回答

0

該僞代碼沒有適當的互斥。考慮P1首先執行:

  • 從開始in2=false開始,P1接管它的輸入協議並進入臨界區。
  • 如果P2執行那麼,由於仍然in1=false,P2也會覆蓋它的輸入協議並進入臨界區,因此也不會互相排斥。

關於無限期推遲:P2執行in2=true

  • 後,in2永遠不會再設置爲false
  • 因此,P1無法克服它的入口協議的while(in2)循環,並在(有)有限地推遲。
相關問題