Critical Sections with atomic read/write
906 ワード
次は原子の読み書き操作を利用する二つのアルゴリズムです.
次のアルゴリズムではデータの読み書きはすべて原子です.
アルゴリズムの一両の手順は以下の通りです.(1)
Petersonのアルゴリズム
次のアルゴリズムではデータの読み書きはすべて原子です.
アルゴリズムの一両の手順は以下の通りです.(1)
while(true){
while(turn == 2);
//critical section
turn = 2;
//outside of critical section
}
(2)while(true){
while(turn == 1);
//cirtical section
turn = 1;
//outside of critical section
}
この解法に存在する問題は、(1)臨界区の外で無限の循環に入ると、(2)一度臨界区に入った後に、turnを1に修正すれば(2)その後は永遠に臨界区に入れなくなります.Petersonのアルゴリズム
while(true){
ready1 = true;
turn = 2;
while(turn == 2 && ready2);
//critical section
ready1 = false;
//outside of critical section
}
while(true) {
ready2 = true;
turn = 1;
while(turn == 1 && ready1);
//critical section
ready2 = false;
//outside of critical section
}
Petersonアルゴリズムは実行可能であり,Nスレッドに拡張することもできる.(Wikiに関連する拡張がある:filterアルゴリズム)