マルチコアと同期
デッドロックの例として正しいものはどれか。
- Aスレッド1がロックAを持ってロックBを待ち、スレッド2がロックBを持ってロックAを待っている
- B2つのスレッドが同じ変数を同期なしに書き換えて、値が壊れる
- C1つのスレッドがロックを取ってすぐに解放する
答えと解説を見る
正解:A. スレッド1がロックAを持ってロックBを待ち、スレッド2がロックBを持ってロックAを待っている
デッドロックは、複数のスレッドがそれぞれ資源を持ったまま、ほかのスレッドが持つ資源を待ち合い、誰も先に進めなくなる状態です。例では、スレッド1はBが空くのを、スレッド2はAが空くのを待ちますが、どちらも自分のロックを手放さないので永久に止まります。CPUを使わずに止まるので、外から見ると処理が固まったように見えます。
- A. 正しい。互いに相手を待ち続けて進めません。
- B. それはデータ競合です。
- C. 問題のない普通の使い方です。