コンパイラ フェンスの概念は、メモリ モデル、バリア、順序付け、アトミックなどについて読んでいるときによく出てきますが、通常は、予想どおり、 CPU フェンスとも対になっているという文脈にあります。
ただし、ときどき、コンパイラにのみ適用されるフェンス構造について読むことがあります。この例は、 cppreference.comstd::atomic_signal_fence
で述べられている C++11 関数です。
std::atomic_signal_fence は std::atomic_thread_fence と同等ですが、メモリ順序付けのための CPU 命令は発行されません。コンパイラによる命令の並べ替えのみが、順序命令として抑制されます。
このトピックに関連する 5 つの質問があります。
名前
std::atomic_signal_fence
が示すように、非同期割り込み(スレッドがシグナル ハンドラーを実行するためにカーネルによってプリエンプトされるなど) は、コンパイラのみのフェンスが役立つ唯一のケースですか?その有用性は、 などの強く順序付けられたものを含むすべてのアーキテクチャに適用され
x86
ますか?コンパイラのみのフェンスの有用性を実証するために、具体的な例を提供できますか?
を使用する場合、使用と注文
std::atomic_signal_fence
の違いはありますか? (違いはないと思います。)acq_rel
seq_cst
この質問は最初の質問でカバーされるかもしれませんが、とにかくそれについて具体的に尋ねるのに十分興味があります:アクセスでフェンスを使用する必要はありますか? (もしそうなら、私はコンパイラーのみのフェンスが最適なツールになること
thread_local
を期待します。)atomic_signal_fence
ありがとうございました。