問題タブ [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 投票する
2 に答える
10516 参照

c++ - 取得/解放とシーケンシャル コンシステント メモリの順序

std::atomic<T>T がプリミティブ型の場合:

操作、操作、および操作に盲目的に使用する場合std::memory_order_acq_rel(これらの関数のデフォルトのメモリ順序をリセットするのと同じことを意味します)fetch_xxxstd::memory_order_acquireloadstd::memory_order_releasestore

  • std::memory_order_seq_cst結果は、宣言された操作のいずれかに使用した場合 (デフォルトとして使用されています)と同じになりますか?
  • std::memory_order_seq_cst結果が同じだった場合、この使用法は効率の点で使用法とは何か違いますか?
0 投票する
2 に答える
143 参照

multithreading - C++ のオブジェクトの volatile キーワード

クラスメンバーの1つとしてスレッドセーフカウンターオブジェクト( std::atomic load() および store() を使用するクラス)があります。スレッド 1 はカウンターをインクリメントし、スレッド 2 はカウンターを読み取ります。

通常、異なるスレッドで共有されるプリミティブ型 ( int など) は、コンパイラの最適化を防ぐために volatile と宣言されます。2 つの異なるスレッドで共有されるこのスレッド セーフなカウンター オブジェクトを volatile として宣言する必要がありますか?

誰かがこれについてより多くの洞察を提供できますか?

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

c++ - c++ 11 std::atomic_flag、これを正しく使用していますか?

スレッドセーフな方法でテストおよび設定する必要がある単純なブール値があります。1 つのスレッドが既に動作している場合は、2 番目のスレッドを終了させます。私がstd::atomic_flag正しく理解していれば、これはうまくいくはずです。ただし、std::atomic_flag正しく理解しているかどうかは自信がありません:)このスピンロックの例を除いて、オンラインで多くの簡単な例を見つけることができないようです:

更新: 以下の提案に基づいてコードを更新し、適切に使用するための適切なテンプレートを作成しましたstd::atomic_flag。皆さんありがとう!

0 投票する
6 に答える
79326 参照

c++ - アトミックを本当に使用する必要があるのはいつですかブールの代わりに?

本質的にアトミックであるatomic<bool>ため、冗長ではありませんか?boolbool 値を部分的に変更することはできないと思います。atomic<bool>の代わりにいつ使用する必要がありboolますか?

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

c++ - std::atomic か適切に動作しますか?

Anthony Williams の「C++ Concurrency in Action」と、新しいマルチスレッド対応メモリ モデルとアトミック操作について説明している第 5 章を読んでいて、彼は次のように述べています。

std::atomic<UDT>一部のユーザー定義で使用するにはUDT、この型に自明なコピー代入演算子が必要です。

私が理解しているように、これはstd::atomic<UDT>、以下が true を返す場合に使用できることを意味します。

このロジックでは、 をstd::stringテンプレート引数として使用してstd::atomic正しく動作させることはできません。

ただし、次のコードはコンパイルおよび実行され、期待される出力が得られます。

これは、たまたま期待どおりに動作する未定義の動作の場合ですか?

前もって感謝します!

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

c++ - アトミック ルールの緩和の (わずかな) 違いは何ですか?

Herb Suttersの「原子兵器」に関する優れた講演を見た後、 Relaxed Atomicsの例について少し混乱しました。

私は、C++ メモリ モデル(SC-DRF = データ競合のない連続整合性)のアトミックが、ロード/読み取りで「取得」を行うことを理解しました。

std::memory_order_seq_cstロード[およびストア]のデフォルトはであるため、2つは同じであることを理解しています。

これまでのところ、Relaxed Atomics は使用されていません (話を聞いた後は、Relaxed Atomics を使用することは決してありません。約束します。しかし、誰かに尋ねられたら、説明する必要があるかもしれません...)。

しかし、なぜ私が使用すると「リラックスした」セマンティクスなのですか

loadを取得していて解放していないのに、これが(1)and と異なるのはなぜ(2)ですか? ここで実際リラックスしているのは何ですか?

私が考えることができる唯一のことは、loadがacquireを意味すると誤解したことです。そして、それが真であり、デフォルトseq_cstが両方を意味する場合、それは完全なフェンスを意味するのではないでしょうか? その命令を上に渡すことも、下に移動することもできませんか? 私はその部分を誤解していたに違いありません。

[そしてストアリリースのために対称的に]。

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

visual-c++ - Visual Studio 2012 のリリース モードで std::atomic_ullong オブジェクトにアクセスするとアクセス違反が発生する

これは私のコードです(ただし、関連のない部分をいくつか削除しました):

これは、デバッグ モードで適切にコンパイルおよび実行されます。ただし、リリース モードに切り替えた後、実行時にアクセス違反の例外が発生し続けます。atom_ullongをatomic_ullongまたはatomic_uintに変更しても問題なく動作するのはとても奇妙です。しかし、この 2 つの長さだけでは十分ではありません。では、なぜこれが起こっているのか、そしてそれを解決する方法を知っている人はいますか? 助けてください!