問題タブ [relaxed-atomics]

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 に答える
131 参照

c++ - C++ 標準での std::memory_order::relaxed の誤用の例 [n4713 の algorithms.parallel.exec/5]

std::memory_order::relaxedC++ 標準におけるの誤用の例の 1 つ:

そして、それは言う、

上記の例は、反復の実行順序に依存し、両方の反復が同じ実行スレッドで順次実行される場合は終了しません。

質問:

  1. コメントには、「間違っています。実行順序を想定しています」と書かれています。「想定実行順序」とは?私はそれが恋しいです。

  2. 「上記の例は、反復の実行順序に依存します」で「反復」とは何を指していますか? whileループでの繰り返しということですか?それとも、の繰り返しを指していますstd::for_eachか?

  3. の反復がstd::for_each異なるスレッドによって並列に実行される場合、反復/スレッドの 1 つが終了しないというのはまだ真実ではありませんか? x.fetch_add(1, std::memory_order::relaxed)はアトミックであるため、1 つのスレッドが 1 を作成しx、別のスレッドがx2 を作成し、両方のスレッドで x == 1 を持つことは不可能です。いいえ?