1. ホーム
  2. c++

[解決済み] c++, std::atomic, std::memory_order とは何か、どのように使うか?

2023-07-13 07:35:40

質問

とは何か、説明できる人はいますか? std::memory_order とは何か、また、それらをどのように std::atomic<> ?

ここに参考文献といくつかの例を見つけましたが、全く理解できません。 http://en.cppreference.com/w/cpp/atomic/memory_order

どのように解決するのですか?

<ブロッククオート

std::memory_orderとは何か、どなたかわかりやすく説明していただけませんでしょうか。

私が見つけた様々なメモリ順序に関する最高の "平易な英語" の説明は、Bartoz Milewski のリラックスしたアトミックに関する記事です。 http://bartoszmilewski.com/2008/12/01/c-atomics-and-memory-ordering/

そして、その続きの記事。 http://bartoszmilewski.com/2008/12/23/the-inscrutable-c-memory-model/

しかし、これらの記事は良い入門書ですが、C++11 標準より前のものであり、安全に使用するために知っておくべきことすべてを教えてくれるわけではないことに注意してください。

また、std::atomic<> でどのように使用するのでしょうか?

ここで私が一番言いたいのは をしないことです。 . 緩和されたアトミックはC++11で最も厄介で危険なものです. std::atomic<T> をデフォルトのメモリ順序 (順次的整合性) で使用することです。ただし、緩和されたメモリ順序を使用することによって解決できるパフォーマンス問題があることを本当に、本当に確認する必要があります。

上記のリンク先の 2 番目の記事で、Bartoz Milewski は次のような結論に達しています。

C++の弱原理について推論しようとしたとき、私は自分自身が何に巻き込まれているのかまったくわかりませんでした。 C++ 弱原理について推論しようとしたとき、自分自身が何に巻き込まれているのかわかりませんでした。その背後にある理論は非常に複雑で、ほとんど使用できません。 使用できません。3人(Anthony、Hans、そして私)と 比較的単純なアルゴリズムの証明を完成させるのに、3人(アンソニー、ハンス、私)と 比較的単純なアルゴリズムの証明を完成させるのに、3人(アンソニー、ハンス、私)がかりで規格を修正しました。同じことを弱い原子論に基づくロックフリーの待ち行列に対して行うことを想像してみてください。 弱原理に基づくロックフリーのキューに対して同じことをするのを想像してみてください!