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

线程间通信

线程间通信

  • 介绍
  • 信息通知
    • 条件锁通知
    • eventfd
  • 结尾

介绍

这种主要介绍线程间的一些通信方式,后续会一直维护。这里应该要分两种。第一肯定就是消息通知。第二就是数据通信。这里主要讲的还是消息通知。
首先说一些,为什么会有信息通知。例如你想要指导某一个i/o是否有数据。或者某一个消息是否收到。如果不通知,那么系统就需要不间断的去检查,目标文件描述符是否有数据。这样就比较浪费系统性能。如果有数据可以被通知,这样就不用浪费系统性能了;

信息通知

条件锁通知

条件锁应该是最常用,相对比较简单的,线程之间信息通知的案例。
他的好处是什么呢,就是简单。对于不太复杂的线程之间的消息通知,我感觉非常的合适。第二个搭配队列有时候,就可以满足一些高峰时段消息处理方法。

#include<mutex>#include<condition_variable>#include<queue>#include<chrono>structContData{std::string Cont_Mess;//这里就是消息内容,std::chrono::system_clock::time_point Time;//这里是该消息,接收到的时候,记录一下时间};std::queue<ContData>CtDatas;std::mutex mtx;std::condition_variable cv;intsec=1;//条件通知,不能让等待线程一致傻等着,还得设置一下,等带时长,intDataMax=512;//队列最多就放512个数据intWrite_contData(conststd::string&data){std::lock_guard<std::mutex>lock(mtx);if(CtDatas.size()>DataMax){return-1;}ContData CtData;CtData.Time=std::chrono::system_clock::now();CtData.Cont_Mess=data;CtDatas.push(CtData);cv.notify_one();return0;}intRead_ContData(ContData*recv){std::unique_lock<std::mutex>lock(mtx);//下面加入一些时间限制,我是想到,如果出现意外,没有通知到,也应该检查一些队列,总是没问题的boolcond_met=cv.wait_for(lock,std::chrono::seconds(sec),[&]{return!CtDatas.empty()});if(CtDatas.empty()){return-1;}*recv=std::move(CtDatas.front());CtDatas.pop();lock.unlock();return0;}

eventfd

eventfd就是也可以作为线程间消息通知,不过其需要初始化,体量以及需要的系统资源比条件锁要多一些。第二个就是其只能传数字。这个局限性比较大,就是只能作为通知,数据是传不了一点。
如果你的系统中,已经有了epoll,那么顺手加上eventfd,进行通知,我感觉也不是不行。对于多任务处理,也蛮不错的。

结尾

后续有时间继续更新

http://www.rkmt.cn/news/1497575.html

相关文章:

  • 导师为什么能“一眼看出”你会不会科研?
  • TMP字体某几个字,突然某名的丢了,怎么修复?
  • Gmail群发邮件每天能发多少封?外贸开发客户够用吗?
  • 超声波液位差计多少钱?2026年主流品牌价格体系与选型价值深度解析 - 仪表品牌排行榜
  • 日常办公常备 7 款格式转换工具,覆盖音视频、文档、电子书全场景
  • 《uni-app开发Harmony Next平台的App》第九篇:实战项目——打造一个集地图、定位和WebView通讯的鸿蒙App
  • 【2026版】史上最新最全面的大模型面经,面试顺利通关
  • APP盲盒源码V6MAX:品牌自营平台搭建方案 - 壹软科技
  • 靠谱车衣工厂怎么挑?五大源头厂家实力拆解
  • AtomGit Flutter鸿蒙客户端:共享组件
  • 普通代理记账公司和懂出口退税的财税顾问,差距体现在哪?| 出口企业选型对照
  • 2026年口碑好的新加坡留学服务机构:五家优选深度解析 - 科技焦点
  • 贺州市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 干豆腐啊
  • 基于RK3588平台的ALSA音频学习与开发指南
  • 滑动窗口:定长滑动窗口与不定长滑动窗口
  • MySQL高可用架构实战:备份恢复、主从复制、读写分离与MHA
  • 金昌市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 干豆腐啊
  • 微信小程序计算机毕设之基于Android的全民健身App设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 浏览器市场与用户画像分析-数据大屏
  • 轻量化落地!四维精益TPM实操体系,根治车间设备故障难题
  • 鞍山市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 千叶啊
  • iOS 27的11个新变化,你觉得值得更新吗?
  • 为机器人原生,时空一体世界动作模型问世!复旦系开辟具身AGI最优解
  • java后端面试题(Redis篇)
  • SolidWorks_基于草图的实体特征7_筋特征构建
  • QT初始(1)
  • 西双版纳傣族自治州2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • 2026武汉网站建设、网站设计、小程序制作公司推荐榜单 - 奔跑123
  • 2026年6月变频器厂家TOP5综合评测:技术、选型与标杆企业全解析
  • N8N 工作流使用中转API 教程