Как я могу создать атомное перечисление в С++?
Класс atomic
содержит атомные версии многих разных типов переменных. Однако он не содержит атомный тип перечисления. Есть ли способ использовать атомные перечисления или сделать свой собственный? Насколько я могу судить, мой единственный вариант - либо не использовать перечисления, либо использовать мьютексы/семафоры для их защиты.
Примечание. Этот отчет отчет об ошибках, который я нашел, упоминает "std:: atomic enum support", но я не вижу упоминания об атомарном типе перечисления в С++ Стандарт, поэтому я не уверен, что это значит.
Ответы
Ответ 1
Вы можете создать атомное перечисление, подобное этому:
#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
Ответ 2
Общий шаблон atomic
может использоваться для всех типов с возможностью копирования, включая перечисления. Независимо от того, является ли он заблокированным, до реализации; мы надеемся, что это будет, если базовый целочисленный тип.