マルチコアと同期
取得(acquire)と解放(release)の意味を持つメモリ操作について正しいものはどれか。
- A取得と解放は、どちらもすべての読み書きを完全に止める最も重いバリアである
- B取得はメモリを確保し、解放はメモリをfreeする操作である
- C取得の後の読み書きは取得より前に動かず、解放の前の読み書きは解放より後に動かない
答えと解説を見る
正解:C. 取得の後の読み書きは取得より前に動かず、解放の前の読み書きは解放より後に動かない
ロックを取るときの操作は取得、手放すときの操作は解放の意味を持ちます。取得より後の操作はロックを取る前に漏れ出さず、解放より前の操作はロックを手放した後に漏れ出さないので、ロックで守った範囲の読み書きが範囲の中に収まります。両方向を止める完全なバリアより制限が少ないので、ハードウェアは残りの入れ替えを使って性能を保てます。
- A. 片方向だけを止めるので、完全なバリアより軽いです。
- B. メモリの確保と解放とは別の意味です。
- C. 正しい。片側だけを止める、軽い順番の保証です。