atomic_flag を使用してスピン ロックを実装しようとしています。C++11 では、atomic_flag 変数を初期化する必要があることはわかっていますが、コンパイルできません。私のコードは次のようになります。
class SpinLock
{
public:
SpinLock()
:m_flag(ATOMIC_FLAG_INIT) /// syntax error : missing ')' before '{'
{
}
void lock()
{
while (m_flag.test_and_set() == true){}
}
void unlock()
{
m_flag.clear();
}
private:
SpinLock &operator=(const SpinLock &);
private:
std::atomic_flag m_flag;
};
コードをコンパイルすると、'{'' の前に 'syntax error : missing ')' が表示されます。また、ATOMIC_FLAG_INIT が {0} として定義されていることもわかりますが、これを記述する正しい方法は何ですか?
以下はコンパイルされますが、それでもスレッドセーフですか?
SpinLock()
{
m_flag.clear();
}