マルチコアと同期

スピンロックで、ロックの変数をいきなりアトミック命令で書き換えようとするのではなく、普段は通常の読み出しで空くのを待ち、空いたと見えたときだけアトミック命令を使う(test-and-test-and-set)理由として正しいものはどれか。

  1. A通常の読み出しの方がアトミック命令より正確だから
  2. Bアトミック命令は1つのプログラムで1回しか使えないから
  3. C読むだけなら自分のキャッシュの中で待てるので、キャッシュラインがコア間を行き来する通信を大きく減らせるから
答えと解説を見る

正解:C. 読むだけなら自分のキャッシュの中で待てるので、キャッシュラインがコア間を行き来する通信を大きく減らせるから

アトミック命令は書き込みをともなうので、待っているスレッドが繰り返し実行すると、そのたびにラインをM状態で奪い合い、ほかのコアのコピーを無効にし続けます。通常の読み出しなら、各コアはS状態のコピーを自分のキャッシュで読み続けるだけで、通信は起きません。ロックが解放されて値が変わったときだけ、アトミック命令で取りに行きます。

  • A. 正確さの違いではありません。
  • B. そのような制限はありません。
  • C. 正しい。書き込みのたびにラインを奪い合わずに済みます。
この分野を解く 分野ページへ

マルチコアと同期のほかの問題

  1. ミューテックス(眠って待つロック)とスピンロックを比べた説明として正しいものはどれか。
  2. デッドロックの例として正しいものはどれか。
  3. 複数のロックを使うプログラムで、デッドロックを防ぐ方法として最も一般的なものはどれか。
  4. メモリ一貫性モデル(メモリコンシステンシモデル)が定めているものはどれか。
  5. 逐次一貫性(シーケンシャルコンシステンシ)の説明として正しいものはどれか。