クラスatomic
には 多くの異なる変数タイプのアトミックバージョン が含まれます。ただし、アトミック列挙型は含まれていません。アトミック列挙型を使用する方法や自分で作成する方法はありますか?私の知る限り、私の唯一の選択肢は、列挙型を使用しないか、ミューテックス/セマフォを使用してそれらを保護することです。
注:これ バグレポート 「std :: atomic enum support」についての言及が見つかりましたが、C++標準ではアトミック列挙型についての言及がないため、それが何であるかわかりません。を参照します。
次のようなアトミック列挙型を作成できます。
#include <atomic>
enum Decision {stay,flee,dance};
std::atomic<Decision> emma_choice {stay}; // emma_choice is atomic
列挙型クラスでも同じことができます。
#include <atomic>
enum class Decision {stay,flee,dance};
std::atomic<Decision> emma_choice {Decision::stay}; // emma_choice is atomic
汎用のatomic
テンプレートは、列挙を含む、簡単にコピーできるすべてのタイプに使用できます。ロックフリーかどうかは実装次第です。基になる整数型がである場合、うまくいけばそうなるでしょう。