マルチコアと同期
CASを使ったロックフリーのデータ構造で問題になるABA問題の説明として正しいものはどれか。
- AAとBの2つのスレッドが、交互にしか実行できなくなる
- B値がAからBに変わり、またAに戻ったとき、CASは変化に気づかずに成功してしまう
- CAとBの2つのロックを、逆の順番で取ってしまう
答えと解説を見る
正解:B. 値がAからBに変わり、またAに戻ったとき、CASは変化に気づかずに成功してしまう
連結リストの先頭のポインタがAのとき、あるスレッドがAを読んでCASの準備をする間に、ほかのスレッドがAを取り除き、Bの操作をして、再び同じ番地Aのノードを入れることがあります。CASは値がAのままなので成功しますが、リストの中身はすでに変わっていて、構造が壊れます。ポインタに更新回数を添えて一緒に比べる方法や、LR/SCを使う方法で防ぎます。
- A. 実行の順番の問題ではありません。
- B. 正しい。値だけを比べるCASの弱点です。
- C. それはデッドロックの原因です。