問題タブ [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.
c++ - C++ 標準での std::memory_order::relaxed の誤用の例 [n4713 の algorithms.parallel.exec/5]
std::memory_order::relaxed
C++ 標準におけるの誤用の例の 1 つ:
そして、それは言う、
上記の例は、反復の実行順序に依存し、両方の反復が同じ実行スレッドで順次実行される場合は終了しません。
質問:
コメントには、「間違っています。実行順序を想定しています」と書かれています。「想定実行順序」とは?私はそれが恋しいです。
「上記の例は、反復の実行順序に依存します」で「反復」とは何を指していますか? whileループでの繰り返しということですか?それとも、の繰り返しを指しています
std::for_each
か?の反復が
std::for_each
異なるスレッドによって並列に実行される場合、反復/スレッドの 1 つが終了しないというのはまだ真実ではありませんか?x.fetch_add(1, std::memory_order::relaxed)
はアトミックであるため、1 つのスレッドが 1 を作成しx
、別のスレッドがx
2 を作成し、両方のスレッドで x == 1 を持つことは不可能です。いいえ?