マルチコアと同期
スピンロックで、ロックの変数をいきなりアトミック命令で書き換えようとするのではなく、普段は通常の読み出しで空くのを待ち、空いたと見えたときだけアトミック命令を使う(test-and-test-and-set)理由として正しいものはどれか。
- A通常の読み出しの方がアトミック命令より正確だから
- Bアトミック命令は1つのプログラムで1回しか使えないから
- C読むだけなら自分のキャッシュの中で待てるので、キャッシュラインがコア間を行き来する通信を大きく減らせるから
答えと解説を見る
正解:C. 読むだけなら自分のキャッシュの中で待てるので、キャッシュラインがコア間を行き来する通信を大きく減らせるから
アトミック命令は書き込みをともなうので、待っているスレッドが繰り返し実行すると、そのたびにラインをM状態で奪い合い、ほかのコアのコピーを無効にし続けます。通常の読み出しなら、各コアはS状態のコピーを自分のキャッシュで読み続けるだけで、通信は起きません。ロックが解放されて値が変わったときだけ、アトミック命令で取りに行きます。
- A. 正確さの違いではありません。
- B. そのような制限はありません。
- C. 正しい。書き込みのたびにラインを奪い合わずに済みます。