std::atomic_flag表示一个布尔标志。
#include <atomic>
int main() {
// 初始化
std::atomic_flag val = ATOMIC_FLAG_INIT;
// 置零 clear是存储操作
val.clear(std::memory_order_release);
// 读取原有值并设置标志成立 "读-改-写"操作
// 获取旧值并设置标志成立
bool x = val.test_and_set();
// 销毁操作(即析构)
return 0;
}
下面使用std::atomic_flag实现自旋锁互斥
- 原子标志置0,表示互斥没有加锁
- 反复调用test_and_set试着锁住互斥
- 一旦读取的值变成false,说明标志已经设置成立,循环终止
std::atomic_flag只能由test_and_set读取值,一旦执行该函数就必然伴随着写出。并不是单纯的读
No comments yet.