我遇到了那个简单的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}