Я пытаюсь реализовать блокировку спина с помощью atom_flag. Я знаю, что с С++ 11 мне нужно инициализировать переменную atom_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;
};
Когда я компилирую код, я получаю синтаксическую ошибку: missing ')' before '{' '. Я также вижу, что ATOMIC_FLAG_INIT определяется как {0}, но каков правильный способ записать это?
Следующие компиляции, но все равно потоки безопасны?
SpinLock()
{
m_flag.clear();
}