マルチコアと同期
複数のロックを使うプログラムで、デッドロックを防ぐ方法として最も一般的なものはどれか。
- Aすべてのスレッドがロックを取る順番を、プログラム全体で同じに決めておく
- Bロックを取ったら、絶対に解放しないようにする
- Cスレッドの数を2つ以下にする
答えと解説を見る
正解:A. すべてのスレッドがロックを取る順番を、プログラム全体で同じに決めておく
デッドロックは、スレッドが互いに相手の持つロックを待つ「輪」ができると起こります。例えば「必ずAを取ってからBを取る」と全員が守れば、Bを持ってAを待つスレッドは現れず、輪ができません。ほかにも、一度に必要なロックをまとめて取る、取れなければ持っているロックを放してやり直す、などの方法があります。
- A. 正しい。待ち合いの輪ができなくなります。
- B. 解放しなければ、ほかのスレッドが永久に待ちます。
- C. 2つのスレッドでもデッドロックは起きます。