同様のテンプレートが Intel の TBB に存在することは知っていますが、Google や Boost ライブラリには実装が見つかりません。
1 に答える
この機能の実装に関する議論は、boost にあります: http://lists.boost.org/Archives/boost/2008/11/144803.php
> N2427 - C++ アトミック タイプとオペレーションを実装できますか
> コンパイラの助けなしで?
いいえ。
インラインアセンブラ(または個別にコンパイルされたアセンブラ)を記述できる場合は、組み込み関数である必要はありません。その後、操作自体を直接記述できます。単純な C++ を使用することもできます (たとえば、単純なロードまたはストアの代入)。コンパイラのサポートが必要な理由は、不適切な最適化を防ぐためです。アトミック操作は最適化で除外できず、通常、他の操作の前または後に並べ替えてはなりません。これは、アトミック ストアが完了する前に実行される非アトミック ストアであっても、レジスタにキャッシュできないことを意味します (たとえば)。また、アトミック操作の後に発生するロードは、アトミック操作の前に引き上げることはできません。一部のコンパイラでは、インライン アセンブラを使用するだけで十分です。他のものでは、外部関数を呼び出すだけで十分です。MSVC は、コンパイラの順序付けを提供する _ReadWriteBarrier() を提供します。他のコンパイラには他のフラグが必要です。