Critical Sections with atomic read/write

906 ワード

次は原子の読み書き操作を利用する二つのアルゴリズムです.
次のアルゴリズムではデータの読み書きはすべて原子です.
アルゴリズムの一両の手順は以下の通りです.(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アルゴリズム)