マルチコアと同期

スピンロックが向かない場面として最も適切なものはどれか。

  1. Aロックを持つ時間が長く、待つスレッドがCPUをむだに使い続けてしまう場面
  2. Bロックを持つ時間が数十ナノ秒と非常に短い場面
  3. COSのカーネルの中で、眠ることのできない処理の場面
答えと解説を見る

正解:A. ロックを持つ時間が長く、待つスレッドがCPUをむだに使い続けてしまう場面

スピンロックで待つスレッドは、ロックが空くまでCPUを使い続けます。ロックを持つ時間が長いと、そのCPUの時間がすべてむだになり、ほかのスレッドの実行も妨げます。特にコアが1つしかないと、ロックを持つスレッドが実行されない限り空かないので、待ちは時間の割り当てが終わるまで続きます。長い待ちには、眠って待つミューテックスを使い、短い間だけ回ってから眠る方式もあります。

  • A. 正しい。その場合は眠って待つロックの方が効率的です。
  • B. 短い場合こそスピンロックが向いています。
  • C. 眠れない場面ではスピンロックが使われます。
この分野を解く 分野ページへ

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

  1. スピンロックで、ロックの変数をいきなりアトミック命令で書き換えようとするのではなく、普段は通常の読み出しで空くのを待ち、空いたと見えたときだけアトミック命令を使う(test-and-test-and-set)理由として正しいものはどれか。
  2. ミューテックス(眠って待つロック)とスピンロックを比べた説明として正しいものはどれか。
  3. デッドロックの例として正しいものはどれか。
  4. 複数のロックを使うプログラムで、デッドロックを防ぐ方法として最も一般的なものはどれか。
  5. メモリ一貫性モデル(メモリコンシステンシモデル)が定めているものはどれか。