Readers–writer lock
排他制御
排他制御をより効率的に行いたい場合には Readers–writer lock と呼ばれる手法を利用することがあります。 Readers–writer lock を利用すると、読み出しと書き換えを行う複数のスレッドが存在する場合に効率的に排他制御を行うことができます。
基本方針
複数のスレッドから変数を読み出したり書き込んだりすることを考えると以下の様な条件を仮定することができます。
- 値の読み出しは、同時に実行される他のスレッドの呼び出しに影響しないため、互いに排他制御を行う必要は無い
- 値の書き換えは、同時に実行される全ての読み出しと書き換えに影響するため、排他制御を実行する必要がある
また、ソフトウェア上で一般的にみられる特徴として以下の様な傾向があります。
- 殆どの変数は、書き換えられる頻度より、読み出される頻度の方が多い
Readers–writer lock
以上の方針を踏まえて Readers–writer lock では以下の様な方針で排他制御を行います。
- 読み出し (Reader) で lock を取得したスレッド同士は同時に実行できる
- 書き換え (Writer) で lock を取得した場合は、他の全ての読み出し (Reader) と書き換え (Writer) に対して排他制御が実行されブロックされる
この方針で排他制御を行うことで、頻度が高いことが多い読み出しの処理を同時に実行できるようになるといったメリットがあります。