修飾子を持つ原子のオブジェクトを作るために何の意味がありますか?修飾子 - volatileを使ってstd :: atomic <>オブジェクトを作成する意味はありますか?揮発性 -
代わりのvolatile std::atomic<int> i(1);
:通常
std::atomic<int> i(1);
修飾子を持つ原子のオブジェクトを作るために何の意味がありますか?修飾子 - volatileを使ってstd :: atomic <>オブジェクトを作成する意味はありますか?揮発性 -
代わりのvolatile std::atomic<int> i(1);
:通常
std::atomic<int> i(1);
いいえ、意味がstd::atomic
内側として、コードは変数はいつでも変更する可能性に対処し、他のプロセッサがいることを、「告げ」する必要があるかもしれないということだろう、揮発性もstd::atomic
を作る際に、絶対にありません変更されました(他のプロセッサにはvolatile
が含まれていません)。
唯一の時間はvolatile
です。コードで制御しているハードウェア(タイマーのカウンタを読み取っているか、現在アクティブなフレームバッファを読み取っているか、ネットワークに通知しているかなど)を指すポインタ次のパケットを送信するためのデータをどこに読み込むかを指定します。コンパイラは、それらの値がいつでも変更できることを知ることができないので、これらの種類のものは揮発性です。
+1良い答え。 STD 'の' volatile'メンバ関数がある理由を尋ねる::原子
、それは意味がありません
使用。
使用atomic
は、他のスレッドが明示的な同期せずにアクセスすることができるが、変数が一つのスレッド上で変更されることを可能にします。
volatile
を使用して、ハードウェアレジスタなどの異常なメモリ位置へのアクセスを制御します。プログラムで指定された順序で読み書きが行われる必要があります。通常の変数(atomicまたはその他)は、通常、そのような制御を必要としません。
二つの概念は互いに無関係です。特に、volatile
と他の言語で使用されるキーワードを混同して、変数をアトミックにしないでください。 C++では、volatile
はスレッドのやりとりとはまったく関係ありません。
あなたの最初の文は、興味をそそられる:_does_ときには、原子オブジェクト 'volatile'を宣言する意味が?それは唯一の妥当な使用は、おそらく珍しいメンバのaotmicオブジェクトになる可能性があります... –
@DietmarKühl:ハードウェアレジスタなどにマルチスレッドアクセスが必要な状況を想像することができます。珍しいが、可能性の領域を超えていない。 –
それは私が思ったものですが、私はそれが動作する必要があることを疑う!結局のところ、 'std :: atomic
[揮発性対揮発性(http://www.drdobbs.com/parallel/volatile-vs-volatile/212701484)。 – IInspectable