std::atomic_flag是最轻量的无锁原子类型,专为自旋锁设计,仅支持test_and_set()和clear()两个原子操作,不支持load/store、拷贝或赋值,必须显式初始化,保证lock-free实现。
std::atomic_flag 是 C++ 中最轻量、最底层的原子类型,专为实现自旋锁(spinlock)这类无锁同步原语而设计。它只支持两个操作:test_and_set()(置位并返回旧值)和clear()(清零),且保证这两个操作是原子的、不可中断的。它不提供 load/store 语义,也不支持拷贝或赋值——天生就是“开关型”工具。
在多线程环境下,有时需要极简、低开销的互斥控制,比如保护一小段关键代码、实现自定义锁、或构建更复杂的原子结构。mutex 太重(涉及系统调用、上下文切换),而 std::atomic 虽简单,但无法保证“测试+设置”是单个原子指令(可能被编译器或 CPU 拆分)。atomic_flag 则由标准强制要求必须以**无锁方式实现**(lock-free),通常直接映射到 CPU 的 test-and-set、exchange 或 compare-and-swap 指令,真正做到了最小延迟。
一个典型的、可复用的自旋锁实现如下:
(注意:实际项目中建议优先使用 std::mutex;自旋锁仅适用于临界区极短、且线程数 ≤ CPU 核心数的场景)
ATOMIC_FLAG_INIT 静态初始化(C++17 起可直接用 {} 初始化)test_and_set(std::memory_order_acquire) 尝试上锁;若返回 false,说明之前是未设置状态,成功获得锁std::this_thread::yield() 提示调度器让出时间片,避免空转霸占 CPUclear(std::memory_order_release),确保释放前的写操作对其他线程可见atomic_flag 一定是 lock-free 的;atomic 可能退化为内部加锁(罕见,但标准允许)atomic_flag 不支持读取当前值(没有 load()),只能通过 test_and_set() “消耗性读取”atomic_flag 不可拷贝、不可赋值、无默认构造函数(必须显式初始化)下面代码演示如何用 atomic_flag 保护一个共享计数器递增:
std::atomic_flag lock = ATOMIC_FLAG_INIT;
int counter = 0;
void increment() {
while (lock.test_and_set(std::memory_order_acquire)) {
std::this_thread::yield(); // 让出 CPU,减少忙等开销
}
++counter;
lock.clear(std::memory_order_release);
}
多个线程并发调用 increment() 时,只会有一个线程能“穿过”这个锁,其余线程在 test_and_set() 返回 true 后持续自旋等待,直到锁被释放。
基本上就这些。它不复杂,但容易忽略它的设计初衷——不是用来存状态,而是用来建同步机制的“砖块”。
# c++
# 工具
# 区别
# 无锁
# 同步机制
# 为什么
# 子类
# 构造函数
# 循环
# 线程
# 多线程
# 并发
# 不支持
# 专为
# 它不
# 最轻
# 清零
# 也不
# 多个
# 适用于
# 这两个
# 只会
相关文章:
微信小程序 五星评分(包括半颗星评分)实例代码
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
建站之星导航如何优化提升用户体验?
如何快速搭建支持数据库操作的智能建站平台?
临沂网站制作企业,临沂第三中学官方网站?
北京企业网站设计制作公司,北京铁路集团官方网站?
建站之家VIP精选网站模板与SEO优化教程整合指南
,网页ppt怎么弄成自己的ppt?
建站主机是否等同于虚拟主机?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
威客平台建站流程解析:高效搭建教程与设计优化方案
如何高效利用亚马逊云主机搭建企业网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何登录建站主机?访问步骤全解析
网站制作软件免费下载安装,有哪些免费下载的软件网站?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
建站org新手必看:2024最新搭建流程与模板选择技巧
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何快速搭建个人网站并优化SEO?
公司网站制作价格怎么算,公司办个官网需要多少钱?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
b2c电商网站制作流程,b2c水平综合的电商平台?
C++如何使用std::optional?(处理可选值)
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
如何在阿里云域名上完成建站全流程?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
建站之星免费版是否永久可用?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
兔展官网 在线制作,怎样制作微信请帖?
建站VPS选购需注意哪些关键参数?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
智能起名网站制作软件有哪些,制作logo的软件?
如何安全更换建站之星模板并保留数据?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何通过VPS建站无需域名直接访问?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
如何选择高性价比服务器搭建个人网站?
音响网站制作视频教程,隆霸音响官方网站?
如何用景安虚拟主机手机版绑定域名建站?
如何有效防御Web建站篡改攻击?
如何将凡科建站内容保存为本地文件?
Swift中循环语句中的转移语句 break 和 continue
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
高端建站如何打造兼具美学与转化的品牌官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。