带原子的简单Spinlock无法编译

时间:2015-02-05 08:09:56

标签: c++ atomic spinlock

我遇到了那个简单的Spinlock,它也与lock_guard配合使用来保存RAII约定:

#include <atomic>
class SpinLock
{
private:
    std::atomic_flag lck = ATOMIC_FLAG_INIT;

public:
    inline SpinLock(){};
    ~SpinLock(){};

    inline void lock(){
        while (lck.test_and_set(std::memory_order_acquire))
        {
        }
    }

    inline void unlock()
    {
        lck.clear(std::memory_order_release);
    }
};

但是这不能编译。

Error   1   6   error C2664: 'std::atomic_flag::atomic_flag(const std::atomic_flag &)' : cannot convert argument 1 from 'int' to 'const std::atomic_flag &' ...\spinlock.h  1   ShortDB

有人可以解释原因吗?那里有很多例子完全相同。 (例如cplusplus.com


编辑: 来自原子VS2013的makro直率:

// STRUCT atomic_flag
#define ATOMIC_FLAG_INIT    {0}

0 个答案:

没有答案