#include<atomic>
using namespace std;
class spinlock
{
//默认构造,其值为false(clear状态),C++20以前可以使用ATOMIC_FLAG_INIT将值初始化,C++20弃用。
atomic_flag flag;
public:
void lock()
{
//此函数将值设为true并返回旧值.当返回false,即该线程成功获取了锁
//其他线程将返回true值,即被阻塞(忙等待将造成浪费)
while(flag.test_and_set(memory_order_acquice));
}
void unlock()
{
//重新将值设为false,使下一个test_and_set调用返回false。
flag.clear(memory_order_release);
}
};
资料来源:
《C++并发编程实战》
www.cppreference.com