web-dev-qa-db-ja.com

C ++でアトミック列挙型を作成するにはどうすればよいですか?

クラスatomicには 多くの異なる変数タイプのアトミックバージョン が含まれます。ただし、アトミック列挙型は含まれていません。アトミック列挙型を使用する方法や自分で作成する方法はありますか?私の知る限り、私の唯一の選択肢は、列挙型を使用しないか、ミューテックス/セマフォを使用してそれらを保護することです。

注:これ バグレポート 「std :: atomic enum support」についての言及が見つかりましたが、C++標準ではアトミック列挙型についての言及がないため、それが何であるかわかりません。を参照します。

19
Cerran

次のようなアトミック列挙型を作成できます。

#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
19
Cerran

汎用のatomicテンプレートは、列挙を含む、簡単にコピーできるすべてのタイプに使用できます。ロックフリーかどうかは実装次第です。基になる整数型がである場合、うまくいけばそうなるでしょう。

22
Mike Seymour