マルチコアと同期

CASを使ったロックフリーのデータ構造で問題になるABA問題の説明として正しいものはどれか。

  1. AAとBの2つのスレッドが、交互にしか実行できなくなる
  2. B値がAからBに変わり、またAに戻ったとき、CASは変化に気づかずに成功してしまう
  3. CAとBの2つのロックを、逆の順番で取ってしまう
答えと解説を見る

正解:B. 値がAからBに変わり、またAに戻ったとき、CASは変化に気づかずに成功してしまう

連結リストの先頭のポインタがAのとき、あるスレッドがAを読んでCASの準備をする間に、ほかのスレッドがAを取り除き、Bの操作をして、再び同じ番地Aのノードを入れることがあります。CASは値がAのままなので成功しますが、リストの中身はすでに変わっていて、構造が壊れます。ポインタに更新回数を添えて一緒に比べる方法や、LR/SCを使う方法で防ぎます。

  • A. 実行の順番の問題ではありません。
  • B. 正しい。値だけを比べるCASの弱点です。
  • C. それはデッドロックの原因です。
この分野を解く 分野ページへ

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

  1. RISC-Vのamoadd.w命令やx86のlock xadd命令のような、フェッチ・アンド・アッド(fetch-and-add)命令の動作として正しいものはどれか。
  2. スピンロックの説明として正しいものはどれか。
  3. スピンロックが向かない場面として最も適切なものはどれか。
  4. スピンロックで、ロックの変数をいきなりアトミック命令で書き換えようとするのではなく、普段は通常の読み出しで空くのを待ち、空いたと見えたときだけアトミック命令を使う(test-and-test-and-set)理由として正しいものはどれか。
  5. ミューテックス(眠って待つロック)とスピンロックを比べた説明として正しいものはどれか。