問題タブ [stdatomic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
115 参照

c++ - C++ 11 で後続のシーケンシャル コンシステント ロードを使用してストア リリースを並べ替えることができますか?

ある場所へのストアはstd::memory_order_release、別の場所からの後続のロードで並べ替えることができますstd::memory_order_acquire

しかし、ある場所へのストアはstd::memory_order_release、別の場所からの後続のロードで再注文できstd::memory_order_seq_cstますか?

同様にstd::memory_order_seq_cst、変数へのストアを別の場所からの後続のロードで並べ替えることができstd::memory_order_acquireますか?

次の例を検討してください。

両方が対応する release/acquire に置き換えられた場合、出力std::memory_order_seq_cstが 2回「0」。

この例では、逐次一貫性によって何かが得られますか?それとも、出力が「0」の 2 倍のままになる可能性がありますか?

0 投票する
2 に答える
35722 参照

c++ - std::atomic_int での「削除された関数の使用」エラー

std::atomic_int変数を使いたい。私のコードには、次のものがあります。

そして、これは私にコンパイルエラーを与えます:

何が起こっているかについて何か考えはありますか?

0 投票する
1 に答える
136 参照

c++ - コンパイル時のメモリの並べ替えによってデッドロックが発生する可能性はありますか?

LLVM での C++11 アトミックの実装に関するこのトークを見ていると、このコードがありました。

私はこのコードにデータ競合がないと考えています (講演者も述べているように) 42

ただし、印刷されるかどうか42わかりません。私の質問は次のとおりです。両方のスレッドがデッドロックするように、コンパイラがスレッド 1 の while ループを過ぎてストアを並べ替えることができないでしょうか? または、C++11 標準のどの部分がそのような動作を防いでいるのでしょうか?

0 投票する
3 に答える
349 参照

c++ - sequenced-before 変更順序の一貫性

http://en.cppreference.comから:

緩和された順序付け std::memory_order_relaxed とタグ付けされたアトミック操作は同期操作ではなく、メモリを順序付けしません。原子性と変更順序の一貫性のみを保証します。たとえば、x と y が最初はゼロの場合、

が r1 == r2 == 42 を生成できるのは、A が B の前に配列され、C が D の前に配列されているにもかかわらず、y の変更順序で D が A の前に出現することを妨げるものはなく、B が変更で C の前に出現することを妨げるものは何もないためです。 x の次数。

質問:上記のコードに、プロパティA が B の前にシーケンスされ、C が D の前にシーケンスされると付与するものは何ですか?

編集:

引き起こす

-02 オプション付きの GCC 4.6.1 で

したがって、(A) と (B) が入れ替わったことがはっきりとわかります。

0 投票する
4 に答える
1468 参照

c++ - 異なるスレッドの異なる場所への 2 つのアトミックな書き込みは、他のスレッドから常に同じ順序で表示されますか?

私の前の質問と同様に、このコードを検討してください

この場合、C ++ 11メモリモデルの下で奇妙な結果 r1==1, r2==0と可能性はありますか? r3==2, r4==0すべてを に置き換えるとどうなりstd::memory_order_acq_relますstd::memory_order_relaxedか?

x86 では、このような結果は禁止されているようです。この SO の質問を参照してください。ただし、一般的な C++11 メモリ モデルについて質問しています。

おまけの質問:

C++11 では奇妙な結果std::memory_order_seq_cstが許容されないことに、私たちは皆同意しています。さて、Herb Sutter は彼の有名な-weapons talk @ 42:30 で言いましたが、それ-loads may not move before -writesのようなものです。上記の例のこの追加の制約が、奇妙な結果を防ぐ方法がわかりません。誰でも説明できますか?atomic<>std::memory_order_seq_cststd::memory_order_acq_rel std::memory_order_acquirestd::memory_order_release

0 投票する
2 に答える
327 参照

c++ - x86 緩和された順序付けパフォーマンス?

Intel は強力なハードウェア メモリ モデルを提供しているため、C++11 プログラムで「memory_order_relaxed」を使用する利点はありますか? または、違いがないため、デフォルトの「順次一貫性」のままにしておきますか?