マルチコアと同期

RISC-VのLR/SC(ロード予約/条件付きストア)のような命令の組で、SC(条件付きストア)が失敗するのはどのようなときか。

  1. ASCで書き込む値が、LRで読んだ値と同じとき
  2. BLRで読んでからSCまでの間に、ほかのコアがその番地に書き込むなどして予約が失われたとき
  3. CLRとSCの間に、ほかの命令を1つでも実行したとき
答えと解説を見る

正解:B. LRで読んでからSCまでの間に、ほかのコアがその番地に書き込むなどして予約が失われたとき

LRは値を読むと同時に、その番地を「予約」します。その後SCで書き込むとき、予約が保たれていれば書き込んで成功、ほかのコアの書き込みなどで予約が失われていれば書き込まずに失敗を返します。CASが値の一致を見るのに対し、LR/SCは書き込みがあったかどうかを見るので、値が一度変わって元に戻った場合も検出できます。ARMにも同じような命令の組があります。

  • A. 同じ値を書き込んでも成功します。
  • B. 正しい。値ではなく、書き込みがあったかどうかを見ます。
  • C. 短い処理なら間に命令を入れられます。
この分野を解く 分野ページへ

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

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