マルチコアと同期
メモリバリア(フェンス)命令の役割として正しいものはどれか。
- Aバリアより前のメモリ操作が、バリアより後の操作より先にほかのコアから見えることを保証する
- Bメモリを物理的に区切って、アクセスを禁止する
- Cプログラムの実行をすべてのスレッドが揃うまで止める
答えと解説を見る
正解:A. バリアより前のメモリ操作が、バリアより後の操作より先にほかのコアから見えることを保証する
CPUはメモリ操作の順番を入れ替えることがあるので、ほかのコアと決まった順番でデータを受け渡すには、それを止める指示が必要です。メモリバリアは、その前の読み書きをすべて終えてから(ほかのコアに見えるようにしてから)、後ろの読み書きを行わせます。ロックの取得や解放の中にもバリアの働きが含まれていて、ロックで守った変数が正しく受け渡されます。
- A. 正しい。メモリ操作の順番の入れ替えを止めます。
- B. アクセスの禁止はページの保護などの仕組みです。
- C. それはスレッドどうしのバリア同期です。