当前位置: 首页 > 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.jsqmd.com/news/985833/

相关文章:

  • 传世无双官方下载指南2026最新入口 装备强化全流程拆解
  • 2026 阳江厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • TMP字体某几个字,突然某名的丢了,怎么修复?
  • 一个被低估的纯 .NET 打造的高性能数据流水线引擎
  • 导师为什么能“一眼看出”你会不会科研?
  • 帮我推荐一家导电银浆回收厂家:依据4项硬性指标精准匹配资源 - 品牌2026
  • 豆包核心功能
  • Gmail群发邮件每天能发多少封?外贸开发客户够用吗?
  • 计算机小程序毕设实战-基于微信小程序的智能停车场管理系统基于springboot+微信小程序的智能停车场管理系统小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 日常办公常备 7 款格式转换工具,覆盖音视频、文档、电子书全场景
  • 《uni-app开发Harmony Next平台的App》第九篇:实战项目——打造一个集地图、定位和WebView通讯的鸿蒙App
  • 使用k8s安装Sonarqube
  • Codex级产品!ToDesk AI 实测,用 Prompt 接管你的工作流
  • 2026年河北制造业企业如何被AI推荐:GEO优化与短视频获客完全实战指南 - 年度推荐企业名录
  • 超声波液位差计多少钱?2026年主流品牌价格体系与选型价值深度解析 - 仪表品牌排行榜
  • 专业的义乌做墨西哥货代推荐
  • 【无人机】基于matlab多架悬挂缆绳无人机协同有效载荷提升【含Matlab源码 15606期】
  • 阿坝藏族羌族自治州2026年5月最新黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金门店地址联系方式推荐 - 千叶啊
  • 邯郸市2026年黄金回收白银回收铂金回收放心选真心推荐靠谱门店排行+联系电话整理 - 干豆腐啊
  • 鞍山市2026年5月最新黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金门店地址联系方式推荐 - 千叶啊
  • Oracle与HP红蓝聚首之后:数据库一体机赛道的风云变幻
  • 2026重庆黄金回收门店综合榜单,闲置黄金置现避坑全攻略 - 奢侈品回收测评
  • 【毕业设计】基于springboot+微信小程序的智能停车场管理系统小程序基于微信小程序的智能停车场管理系统(源码+文档+远程调试,全bao定制等)
  • 陇南市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 千叶啊
  • Linux环境下Apache Web服务器部署与配置指南
  • 网络经纪人助手口碑实测:合规性与服务能力全维度评测 - 奔跑123
  • 【2026版】史上最新最全面的大模型面经,面试顺利通关
  • 2026年值得信赖的新加坡留学机构:五家优选深度解析 - 科技焦点
  • 2026年6月铝圆片厂家怎么选?5家靠谱生产企业横向测评对比 - 外贸老黄
  • 小红书矩阵运营,正在悄悄改变内容行业