2017-11-27 20 views
0

私は相互排除のためにPetersonのアルゴリズムでこれを読んでいますが、クリティカルセクションの入力部分の最後の文にifその上に声明:Petersonのアルゴリズムにif文があるとどうなりますか

flag[j] = true; 
turn = j 
if(turn ==j) 
     while(flag[k]); 

私は1つのプロセスは、最初の二つの文を通過する場合、第二の方法は、その後の重要なセクションに最初のプロセスヘッドの前にそれの最初の文でこっそり、そして可能性として相互排他があると考えました第二のプロセスは病棟に入ることができ、それによって不動産が損なわれますが、私は公平性や活気を確信していませんでしたか?

+0

これはまだ2つのプロセスでのみ実行していますか?そうでなければ、あなたは一般化できませんでした。もしそうなら、なぜ表記法をパラメータ 'j'と' k'に切り替えるのですか? – Prune

+0

私はそれを書いている間に誰かがJ.Kを言ったと聞いていたので、私は表記法を変えたばかりで、頭が詰まってしまった。奇妙なことに私は知っているが肩をすくめる – Marorin

答えて

0

まず第一に、あなたがチェックを分ける場合、それはあなたが指摘してきた正確な理由のために、もはやピーターソンのアルゴリズムです:2つの操作の間に、別のプロセスがでこっそりできる

公正性に影響し、生き生きとした生活(生き生きとしたものではない)は、同じ隔たりを持つ必要があります。変更によってアルゴリズムが単調に許容されるため、これらのプロパティの両方は元のままです。相互排除が現在破られているという注意点があります。

+0

2つの操作の間に、最初の2つの文とif文の間の意味がありますか?前に私が書いたことを正当であると考えるかどうかを明確にしたいだけです。 – Marorin

+0

私はあなたが紹介した 'if'と' while'の間の分割について話しています。 – Prune

+0

ああ、1つのプロセスがifステートメントまでずっと進んでいて、それをチェックしてから2つ目のプロセスがCSに入り込むと相互排除が起こるのですか? – Marorin

関連する問題