排他制御を使用した場合
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/02/12 13:56 UTC 版)
「クリティカルセクション」の記事における「排他制御を使用した場合」の解説
排他制御をしたクリティカルセクションとは、1つのスレッドのみが使用権を得ることができるプログラム上の処理領域である。この使用権はロック (lock) と呼ばれることもある。 あるスレッドが排他制御をしたクリティカルセクションに入っている間は、別のスレッドはクリティカルセクションに入ることができない。普通はそのスレッドは待機状態になる。 このカウンタプログラムの場合、プログラムの最初、つまり上の場合でいうと処理1の前に排他制御のロックを獲得してクリティカルセクションに入るという処理を付け加える必要がある。そして、スレッドが終了する前に排他制御のロックを解放してクリティカルセクションから出るという処理を付け加えれば完了である。 ここで、先ほどと同様にスレッドAが処理1、処理2を終わらせて処理3を実行する前に、スレッドBが発生したとする。しかし、ここで既にスレッドAがロックを獲得してクリティカルセクションに入っていることから、スレッドBはロックを獲得できず処理を開始できないため待機状態となる。そしてスレッドAが処理を終え、クリティカルセクションから出ると他のスレッドがロックを獲得できるようになり、スレッドBが待機を解除して処理を再開する。結果として、意図したとおりの正しい動作になる。 以上の処理を時間に沿ってまとめたものが以下の表である。なおクリティカルセクションはCSと略している。 ディスク上の値スレッドA(値)スレッドB(値)CSの所有者100 スレッド発生 100 CSに入る スレッドA 100 処理1(100) 100 処理2(101) 100 待機 スレッド発生 100 CSに入ることに失敗 101 処理3(101) 待機 101 CSから出て、スレッド終了 101 CSに入る スレッドB 101 処理1(101) 101 処理2(102) 102 処理3(102) 102 CSから出て、スレッド終了
※この「排他制御を使用した場合」の解説は、「クリティカルセクション」の解説の一部です。
「排他制御を使用した場合」を含む「クリティカルセクション」の記事については、「クリティカルセクション」の概要を参照ください。
- 排他制御を使用した場合のページへのリンク