私はピーターソンのアルゴリズムに関する情報を検索してきましたが、それが飢餓を満足させるのではなく、デッドロックを満足させるだけであるという言及に出くわしました。これは本当ですか?もしそうなら、誰かがなぜそうしないのか詳しく説明できますか?
ピーターソンのアルゴリズム:
flag[0] = 0;
flag[1] = 0;
turn;
P0: flag[0] = 1;
turn = 1;
while (flag[1] == 1 && turn == 1)
{
// busy wait
}
// critical section
...
// end of critical section
flag[0] = 0;
P1: flag[1] = 1;
turn = 0;
while (flag[0] == 1 && turn == 0)
{
// busy wait
}
// critical section
...
// end of critical section
flag[1] = 0;
アルゴリズムは、フラグとターンの2つの変数を使用します。フラグ値1は、プロセスがクリティカルセクションに入ろうとしていることを示します。変数turnは、そのターンのプロセスのIDを保持します。P1がクリティカルセクションに入ることを望まない場合、またはP1がターンを0に設定することによってP0を優先した場合、クリティカルセクションへの入り口はプロセスP0に許可されます。