マルチコアと同期
大きなデータ構造全体を1つのロックで守る「粗い粒度のロック」と、部分ごとに別のロックで守る「細かい粒度のロック」を比べた説明として正しいものはどれか。
- A粗い粒度のロックの方が、いつでも並列性が高い
- B細かい粒度のロックにすると、ロックの数が減る
- C細かい粒度は複数のスレッドが別の部分を同時に使えて並列性が高いが、設計が複雑になりデッドロックの危険も増える
答えと解説を見る
正解:C. 細かい粒度は複数のスレッドが別の部分を同時に使えて並列性が高いが、設計が複雑になりデッドロックの危険も増える
粗い粒度のロックは単純で誤りにくい一方、関係のない部分を使うスレッドどうしも待ち合うので、コアが増えても速くなりにくくなります。ハッシュ表のバケットごとにロックを分けるような細かい粒度にすれば、別の部分は同時に操作できます。ただし複数のロックを取る場面が増え、取る順番の管理やロックそのものの手間が問題になります。
- A. 粗いロックでは、一度に1つのスレッドしか入れません。
- B. ロックの数は増えます。
- C. 正しい。単純さと並列性の釣り合いを考えて選びます。