2013-08-18 4 views

答えて

9

いいえ、意味がstd::atomic内側として、コードは変数はいつでも変更する可能性に対処し、他のプロセッサがいることを、「告げ」する必要があるかもしれないということだろう、揮発性もstd::atomicを作る際に、絶対にありません変更されました(他のプロセッサにはvolatileが含まれていません)。

唯一の時間はvolatileです。コードで制御しているハードウェア(タイマーのカウンタを読み取っているか、現在アクティブなフレームバッファを読み取っているか、ネットワークに通知しているかなど)を指すポインタ次のパケットを送信するためのデータをどこに読み込むかを指定します。コンパイラは、それらの値がいつでも変更できることを知ることができないので、これらの種類のものは揮発性です。

+1

+1良い答え。 STD 'の' volatile'メンバ関数がある理由を尋ねる::原子 'そこに気に? 「揮発性」原子の必要性がなければ、なぜそれらの「揮発性」機能が最初に定義されているのですか? –

4

、それは意味がありません

使用。

使用atomicは、他のスレッドが明示的な同期せずにアクセスすることができるが、変数が一つのスレッド上で変更されることを可能にします。

volatileを使用して、ハードウェアレジスタなどの異常なメモリ位置へのアクセスを制御します。プログラムで指定された順序で読み書きが行われる必要があります。通常の変数(atomicまたはその他)は、通常、そのような制御を必要としません。

二つの概念は互いに無関係です。特に、volatileと他の言語で使用されるキーワードを混同して、変数をアトミックにしないでください。 C++では、volatileはスレッドのやりとりとはまったく関係ありません。

+0

あなたの最初の文は、興味をそそられる:_does_ときには、原子オブジェクト 'volatile'を宣言する意味が?それは唯一の妥当な使用は、おそらく珍しいメンバのaotmicオブジェクトになる可能性があります... –

+0

@DietmarKühl:ハードウェアレジスタなどにマルチスレッドアクセスが必要な状況を想像することができます。珍しいが、可能性の領域を超えていない。 –

+0

それは私が思ったものですが、私はそれが動作する必要があることを疑う!結局のところ、 'std :: atomic 'はmutexロックと 'T'を使って実装することができます。すなわち、' std :: atomic 'のメモリレイアウトは知られていません。いくつかのタイプ。 –

関連する問題