マルチコアと同期
RISC-VのLR/SC(ロード予約/条件付きストア)のような命令の組で、SC(条件付きストア)が失敗するのはどのようなときか。
- ASCで書き込む値が、LRで読んだ値と同じとき
- BLRで読んでからSCまでの間に、ほかのコアがその番地に書き込むなどして予約が失われたとき
- CLRとSCの間に、ほかの命令を1つでも実行したとき
答えと解説を見る
正解:B. LRで読んでからSCまでの間に、ほかのコアがその番地に書き込むなどして予約が失われたとき
LRは値を読むと同時に、その番地を「予約」します。その後SCで書き込むとき、予約が保たれていれば書き込んで成功、ほかのコアの書き込みなどで予約が失われていれば書き込まずに失敗を返します。CASが値の一致を見るのに対し、LR/SCは書き込みがあったかどうかを見るので、値が一度変わって元に戻った場合も検出できます。ARMにも同じような命令の組があります。
- A. 同じ値を書き込んでも成功します。
- B. 正しい。値ではなく、書き込みがあったかどうかを見ます。
- C. 短い処理なら間に命令を入れられます。