DCLP の問題を説明している記事「C++ とダブルチェック ロックの危険性」を読んでいます。
記事の第 2 部 (リンク先) では、C/C++ volatile だけで DCLP を試して解決する方法を示します (私の知る限り、これは不可能です)。記事では、ライターはその方法を説明していますが (最後の例は 11 番です)、次のように書いています。
残念ながら、これだけでは最初の問題に対処することはできません。C++ の抽象マシンはシングル スレッドであり、C++ コンパイラは、前述のようなソースからスレッドセーフでないコードを生成することを選択する可能性があります。そうしないと、最適化の機会が失われ、効率が大幅に低下します。このすべての後、振り出しに戻ります。しかし、待ってください。さらに多くのプロセッサがあります。
つまり、(私が正しく理解していれば) volatile をどれだけうまく使用しても機能しないということです」ちょうど言及した」
しかし、それは「C++ の抽象マシンはシングル スレッドである」とはどういう意味ですか?!
これらすべての揮発性物質を使用した上記の例では、並べ替えが妨げられないのはなぜですか?
ありがとう!