0

内部参照カウントを示すstruct整数 (たとえば ) を含む があります。int m_ref

C との互換性を維持するために、タイプを に変更することはできません。 にはプレーンな古いデータしか含まれstd::atomic<int>ていない可能性があります。struct

ただし、コードを調整して、C++11 のアトミック機能を活用したいと考えています。つまり、私は達成する必要があります:

++m_ref;

--m_ref;

アトミック操作として。私は現在、これを行うためにアセンブラー (Intel バスロック) を使用していますが、そのコードは移植性が低く、C++ が標準構造を提供するようになったため、削除したいと考えています。

どういうわけか、「ボンネットの下」に行きatomic<T>、アトミック型を作成するオーバーヘッドなしで何をする必要がありますか: m_ref をアタッチするatomic<T>とパフォーマンスが低下するのではないかと心配しています。

これは非常に標準的であると思いますが、ここには単純なものがありません。

4

2 に答える 2

6

C++11 では、非アトミック型に対してアトミック操作を使用できません。整数に対するアトミック操作を取得するにはstd::atomic<int>、 orを使用する必要があります。tostd::atomic_intのキャストは未定義の動作です。intstd::atomic<int>

C11 コンパイラと C++11 コンパイラがatomic_intある場合は、どちらの場合でも使用できます ( usingC++ に適切な宣言を使用)。コンパイラに互換性がある場合、すべてが「正常に動作」します。

于 2013-07-30T09:10:57.983 に答える