2017-04-09 16 views
0

に私は、相互の除外についての例をいくつか読んだことがある、と私は私に手渡し、次の例を除いて、それらのほとんどの実行を理解することができます:Unclearanceは相互排他例

boolean[] flag = new boolean[2]; 

enter image description here

1 while-条件は他のプロセスのフラグ[n]状態に依存します。 したがって、たとえばP1が重要なセクションに入るようにするには、flag[0]flag[1]の両方をtrueに設定する必要があります。 flag[0]flag[1]セットでtrueに両方のプロセスがwhile(flag[n])条件とrace-を渡すので、これは正しいことができませんが

P1 - > flag[1] = true 
while(flag[0])   // flag[0] is still state-undeclared 
P2 -> flag[0] = true // so P0 must set it true(?) 
critic1(); 
while(flag[1]) 
critic2(); 

私interpertationによると、全体の実行は次のようになりする必要がありますそれでも状態が発生する可能性があります。私は何を誤解していますか?

+0

お気軽にお問い合わせください。 –

答えて

1

宣言と定義

boolean[] flag = new boolean[2]; 

は、Javaのように見える、とJavaでブール配列がデフォルト値として虚偽で満たされています。

したがって、たとえばP1の方が重要な部分であるためには、 フラグ[0]とフラグ[1]の両方をtrueに設定する必要があります。

場合ではありませんいいえ、P1Critical Sectionに向かうことにするために、唯一のものはP1Critical Sectionに入る前に、P0の次のステートメントを実行してはならないことです。

flag[0] = true; 

、デフォルトflag[0] = falseことであるため、ループ条件while(flag[0])は偽となり、P1がクリティカルセクションを入力します。

プロセスP0P1が対応する次の文を処理の両方のために、次のステートメントが実行されるように予定されている場合:そのような場合のデッドロックに

flag[0] = true; and flag[1] = true; 

が発生します。

関連する問題