如何在C ++中创建原子枚举?

时间:2014-02-13 14:05:01

标签: c++ c++11 enums atomic

班级atomic包含atomic versions of many different variable types。但是,它不包含原子枚举类型。有没有办法使用原子枚举或自己制作?据我所知,我唯一的选择是不使用枚举或使用互斥锁/信号量来保护它们。

注意:我发现这个bug report提到了“std :: atomic enum support”,但我没有在C ++标准中看到任何提及原子枚举的类型,所以我不确定它是指什么到。

2 个答案:

答案 0 :(得分:21)

通用atomic模板可用于所有简单的可复制类型,包括枚举。它是否无锁是由实施决定的;希望它是,如果基础整数类型是。

答案 1 :(得分:15)

你可以像这样创建一个原子枚举:

#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