Подтвердить что ты не робот

Как я могу создать атомное перечисление в С++?

Класс atomic содержит атомные версии многих разных типов переменных. Однако он не содержит атомный тип перечисления. Есть ли способ использовать атомные перечисления или сделать свой собственный? Насколько я могу судить, мой единственный вариант - либо не использовать перечисления, либо использовать мьютексы/семафоры для их защиты.

Примечание. Этот отчет отчет об ошибках, который я нашел, упоминает "std:: atomic enum support", но я не вижу упоминания об атомарном типе перечисления в С++ Стандарт, поэтому я не уверен, что это значит.

4b9b3361

Ответ 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 может использоваться для всех типов с возможностью копирования, включая перечисления. Независимо от того, является ли он заблокированным, до реализации; мы надеемся, что это будет, если базовый целочисленный тип.