2013-10-05 9 views
5

なぜC++アトミック演算に揮発性のオーバーロードされたバージョンがあるのですかatomic<T>揮発性原子変数によるアトミック演算

atomic<T>を揮発性として宣言する必要がある場合、atomic<T>volatile atomic<T>の違いは何ですか?

+2

*なぜ、原子番号を揮発性と宣言しなければならないのですか。*誰がそれを言ったのですか? – Nawaz

+2

@ Nawaz私はそれが本当に "いつ私たちが必要なのか"を尋ねるタイプミスだと思うので、私はOPにこれを確認するように頼みます。 –

+0

@Nawaz OPは揮発性と宣言しなければならない状況を尋ねています。 – this

答えて

3

これは他のタイプと同じです。メモリマップされたI/Oレジスタでアトミック操作を実行している場合、またはvolatile修飾された型のセマンティクスが必要な場合は、アトミックを揮発性修飾する必要があります。アトミシティやスレッド間の同期やアトミック操作で提供されるメモリの順序付けには何ら関係しません)。

標準は、アトミックためvolatileオーバーロード(29.6.5[atomics.types.operations.req]/3

について言うためにこれを持っている[注:多くの操作は、volatile修飾されています。 「デバイスレジスタの揮発性」セマンティクスは、標準で に変更されていません。この資格は、これらの操作を の揮発性オブジェクトに適用するとボラティリティが保持されることを意味します。これは、不揮発性オブジェクトに対する操作が揮発性になることを意味するものではありません。従って、不揮発性オブジェクトに対する揮発性 の演算は、いくつかの条件の下でマージされる可能性があります。 -end note]

関連する問題