私は C でいくつかの低レベルの同期コードを書いています。そして、問題に遭遇しました:
2 つのスレッドがThread A
ありThread B
、x86_64 マシンで実行されているとします。Thread A
時刻t1にメモリ ロケーションに書き込み、その後、このロケーションへの書き込みはありません。時刻t2Thread B
で同じメモリ位置を読み取ります。
Thread A:
foo = magic_value; /* happens at t1 */
Thread B:
bar = foo; /* happens at t2 */
assert(bar == magic_value);
私の質問は、t2 - t1 > deltaであるt1およびt2に対して、 deltaが存在するかどうかです。t1に書き込まれた最新の値を読み取ることが保証されています。Thread B
Thread A
Intel と AMD の文書を読んだことがありますが、そのような保証が存在するかどうかは言及されていませんでした。この値は、プロセッサのモデルまたはマザーボードの設計 (マルチソケット マシンの場合) に依存する可能性があることを知っています。現在利用可能な正常な x86_64 マシンでは、このレイテンシーに何らかの制限があるに違いないと思います。
ロックやメモリバリアなどの同期プリミティブを使用して、そのような動作を保証する方法を知っています。メモリアクセスがグローバルに見えるようになるために、そのような保証されたレイテンシが存在するかどうかを知る必要があるだけです.
どうもありがとう!!