当前位置: 首页 > news >正文

ZLToolKit 源码分析(二):线程同步原语 semaphore 与 onceToken

高并发框架的基石是同步原语。本文逐行分析 ZLToolKit 自研的 semaphore(信号量)和 onceToken(RAII 守卫),揭示其如何用 C++11 标准库实现高效且安全的线程同步。

1. 为什么不用 std::semaphore?

C++20 才引入std::counting_semaphore,而 ZLToolKit 基于 C++11 开发,必须自研。其实现基于std::condition_variable+std::mutex,语义等价于std::counting_semaphore

2. semaphore 源码全解

文件:src/Thread/semaphore.h

2.1 完整源码

classsemaphore{public:semaphore(size_t initial=0){_count=initial;}// V 操作:释放信号量voidpost(size_t n=1){std::lock_guard<std::mutex>lock(_mutex);_count+=n;if(n>1){_condition.notify_all();}else{_condition.notify_one();}}// P 操作:获取信号量(阻塞)voidwait(){std::unique_lock<std::mutex>lock(_mutex);while(_count==0){_condition.wait(lock);}--_count;}private:size_t _count;std::mutex _mutex;std::condition_variable _condition;};

2.2 逐行精析

post() — 释放信号量
voidpost(size_t n=1){std::lock_guard<std::mutex>lock(_mutex);// RAII 加锁_count+=n;// 增加计数if(n>1){_condition.notify_all();// 释放多个,唤醒所有等待者}else{_condition.notify_one();// 释放一个,只唤醒一个}}

关键设计:

  • n > 1时用notify_all()——因为多个等待者可能都需要被唤醒
  • n == 1时用notify_one()——避免惊群效应(thundering herd)
wait() — 获取信号量
voidwait(){
http://www.jsqmd.com/news/931070/

相关文章:

  • 微博视频去水印方法全场景实操指南含在线工具使用技巧
  • 郑州市 高新区 厨卫改造翻新上门施工|维小达厨房改造、卫生间翻新、厨卫防水重做、下水管道改造一站式施工服务 - 维小达科技
  • 深度解析RevokeMsgPatcher:企业级消息保留技术完全手册
  • 【Agent智能体15 | 工具使用-现代的LLM请求调用工具的语法】
  • 手写一款高兼容、零BUG图片预览组件|前端
  • 多因子检测试剂盒(Multiplex Assay Kit)磁珠读数异常原因及解决方案
  • 基于WIO Terminal的智能交通灯模拟系统:从传感器到状态机的嵌入式实践
  • 2026 广州黄金回收避坑,五家口碑好店,收的顶专业合规排名第一 - 奢侈品回收测评
  • 7-Zip-zstd深度实战:六大现代压缩算法如何革新你的文件管理体验
  • 如何掌控你的惠普OMEN游戏本:OmenSuperHub完全使用指南
  • 2026年薪酬设计:这3个公平性原则让团队心服口服
  • 2026最新济南短视频运营平台排行:5家机构实力实测对比 - 奔跑123
  • 083、医学影像 CT/MRI 窗宽窗位应用不当?DICOM 解析、HU 值映射与多窗显示方案
  • 一文说清仓库管理三管三理:仓库管理到底管什么?理什么?
  • [开源] 住院床位实时智能调度系统:面向护士长的多目标优化分配工具,支持 CLI 快速决策、Web 可视化监控与 API 集成调用
  • 用Python和Tensorly复现经典PARAFAC论文:从荧光光谱数据到三维张量分解实战
  • 山东采暖炉品牌排行:实测性能与服务维度客观对比 - 奔跑123
  • 2026 年论文降 AI 工具硬核横评:16 款实测谁在保命谁在毁稿
  • Sora 2新闻视频制作终极清单:23项元数据埋点要求、8类信源溯源字段、7种政要形象生成禁令(内部培训绝密版)
  • Kali 实战教程:手把手教学断网攻击实操
  • 第4章:MCU最小系统设计——从一颗光杆芯片到它能跑起来
  • Sora 2到底值不值得现在上手?一线影视/广告/教育团队的30天实测结论与迁移成本预警(含ROI测算表)
  • [开源] 科室二次分配公平感模拟器:用博弈论算出护士长敢拍板的奖金方案,让夜班、年资、技术难度全进模型
  • NCMconverter:如何轻松解锁网易云音乐NCM格式音频文件
  • 零基础速存!最新 Kali Linux 全套详细教程,从下载安装到上手使用完整指南
  • 为什么你的Sora 2物理模拟总“飘”?3步校准重力场、碰撞响应与材质摩擦系数,即刻生效
  • 浏览器市场与用户画像分析 实验报告
  • DLSS Swapper:一键升级游戏性能的终极解决方案
  • 【Sora 2景观设计视频避坑白皮书】:权威发布住建部合作项目验证的4类合规风险、3项版权红线及实时渲染替代方案
  • 纸电路入门:用导电胶带和纽扣电池点亮创意世界