私はgcc 4.4.6を使用しており、アトミックには#include <cstdatomic>
. それらを使用した後、私はそれらが非常に遅いことに気づきました。最後に、stackoverflow に関する投稿に出くわしました。ここでは、それについて説明しています。
しかし、私はそれに従うことができません。誰かがその投稿を理解するのを手伝ってくれたり、gcc4.4.6 のアトミックがとても遅い理由を説明してくれませんか?
gcc-4.4はアトミックのサポートの非常に早い段階だったと思います。gccのアトミックは最近gcc-4.7で作り直されました。これは、さまざまなハードウェアターゲットがハードウェア固有の効率的な組み込み関数を使用できる最初のリリースだと思います。gcc-4.8では、libatomicが提供されました。4.7および4.8の過程で、さまざまなプラットフォームがアトミックサポートをアップグレードしました。wikiは、アトミックを使用する場合のさまざまなメモリモデルによる最適化のトレードオフのいくつかを説明しています。
基本的に、gcc-4.4は少し早かったです。IIRCでさえ、アトミックの標準仕様でさえ、gcc-4.7を介して流動的でした。
私は__sync_*
4.6.3 の関数を使用しましたが、顕著な遅さは感じませんでしたし、生成されたアセンブラー コードにも問題はありません。以前使用していたプロジェクトを更新しました__sync_fetch_and_add
-std::atomic<>::fetch_add()
アトミック関数を頻繁に呼び出すわけではありませんが、コードのシングルスレッドまたはマルチスレッド実行で、コードにまったく違いはありませんでした。したがって、以前の回答に同意します。新しいgcc
を入手すると、それ自体が修正されるはずです。