マルチコアと同期

大きなデータ構造全体を1つのロックで守る「粗い粒度のロック」と、部分ごとに別のロックで守る「細かい粒度のロック」を比べた説明として正しいものはどれか。

  1. A粗い粒度のロックの方が、いつでも並列性が高い
  2. B細かい粒度のロックにすると、ロックの数が減る
  3. C細かい粒度は複数のスレッドが別の部分を同時に使えて並列性が高いが、設計が複雑になりデッドロックの危険も増える
答えと解説を見る

正解:C. 細かい粒度は複数のスレッドが別の部分を同時に使えて並列性が高いが、設計が複雑になりデッドロックの危険も増える

粗い粒度のロックは単純で誤りにくい一方、関係のない部分を使うスレッドどうしも待ち合うので、コアが増えても速くなりにくくなります。ハッシュ表のバケットごとにロックを分けるような細かい粒度にすれば、別の部分は同時に操作できます。ただし複数のロックを取る場面が増え、取る順番の管理やロックそのものの手間が問題になります。

  • A. 粗いロックでは、一度に1つのスレッドしか入れません。
  • B. ロックの数は増えます。
  • C. 正しい。単純さと並列性の釣り合いを考えて選びます。
この分野を解く 分野ページへ

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

  1. ロックフリー(lock-free)のアルゴリズムの性質として正しいものはどれか。
  2. クリティカルセクションの説明として正しいものはどれか。
  3. 並列プログラムで使われるバリア同期の説明として正しいものはどれか。
  4. 64個のコアが、1つの共有カウンタを同時にアトミック命令で更新し続けると、コアを増やしても速くならない。主な理由はどれか。
  5. NUMA(不均一メモリアクセス)のシステムの説明として正しいものはどれか。