質問

Class atomic contains atomic versions of many different variable types. However, it doesn't contain an atomic enum type. Is there a way to use atomic enums or make my own? As far as I can tell, my only option is to either not use enums or use mutexes/semaphores to protect them.

Note: This bug report I found mentions "std::atomic enum support", but I don't see any mention of an atomic enum type in the C++ Standard, so I'm not sure what that refers to.

役に立ちましたか?

解決

You can create an atomic enum like this:

#include <atomic>

enum Decision {stay,flee,dance};
std::atomic<Decision> emma_choice {stay}; // emma_choice is atomic

You can also do the same thing with enum classes:

#include <atomic>

enum class Decision {stay,flee,dance};
std::atomic<Decision> emma_choice {Decision::stay}; // emma_choice is atomic

他のヒント

The generic atomic template can be used for all trivially copyable types, including enumerations. Whether or not it's lock-free is up to the implementation; hopefully it will be, if the underlying integer type is.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top