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

【C++】多线程和多进程

在C++中,多线程通信(同一进程内的线程间交互)和进程间通信(IPC,不同进程间的数据交换)是构建并发系统的核心技术。以下是两种通信机制的详细介绍和典型实现:

一、多线程通信(线程间同步与数据共享)

1. 共享内存与同步原语

通过全局变量或对象成员变量实现数据共享,配合同步原语避免竞态条件。

示例:生产者-消费者模型

#include <iostream>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <thread>std::queue<int> buffer;
std::mutex mtx;
std::condition_variable cv_producer, cv_consumer;
bool ready = false;
bool done = false;// 生产者线程
void producer() {for (int i = 0; i < 5; ++i) {std::unique_lock<std::mutex> lock(mtx);cv_producer.wait(lock, []{ return buffer.size() < 3; }); // 缓冲区未满buffer.push(i);std::cout << "Produced: " << i << std::endl;ready = true;cv_consumer.notify_one();}{std::lock_guard<std::mutex> lock(mtx);done = true;}cv_consumer.notify_all();
}// 消费者线程
void consumer() {while (true) {std::unique_lock<std::mutex> lock(mtx);cv_consumer.wait(lock, []{ return ready || done; }); // 有数据或已完成if (done && buffer.empty()) break
http://www.xdnf.cn/news/435295.html

相关文章:

  • Java Spring 事件驱动机制
  • 中医诊所药房开处方调剂库存管理h5/pc开源版开发
  • 提供全球86国/地区进出口税费,46国/地区监管条件,53国/地区税费计算
  • 第二十三天打卡
  • 项目管理系统流程:高效运作的关键所在
  • 使用ADB命令操作Android的apk/aab包
  • [SAP] 通过程序名获取事务码TCode
  • Python实例题:Pvthon实现简单的Web服务器
  • AI 编程新时代!字节 Seed-Coder 重磅登场
  • 第六章QT基础: Lambda表达式补充
  • [250513] “End of 10” 活动:应对 Windows 10 支持终止,推广 Linux 转型
  • livenessProbe 和 readinessProbe 最佳实践
  • Pytorch学习笔记(二十二)Audio - Audio I/O
  • 论文《Collaboration-Aware Graph Convolutional Network for Recommender Systems》阅读
  • 打卡DAY24
  • 【调度算法】LaCAM快速多智能体路径搜索算法
  • LLM大模型transform架构的核心知识
  • 《从协议层面剖析 VoIP 通信:SIP 信令流中的 RPort、注册与呼叫建立机制》
  • 20250512期:基于arcpy数据驱动的大批量规范化出图
  • 油桃缺陷检测数据集VOC+YOLO格式559张2类别
  • AI助力:零基础开启编程之旅
  • 【JavaScript】原生 JavaScript 实现 localStorage 过期时间
  • Linux常用命令39——free显示系统内存使用量情况
  • 软件测试——面试八股文(入门篇)
  • 项目三 - 任务6:回文日期判断
  • 飞拍技术介绍
  • 从数据中台到数据飞轮:数字化转型的演进之路
  • Google Earth Engine(GEE) 代码详解:批量计算_年 NDVI 并导出(附 Landsat 8 数据处理全流程)
  • 这类物种组织heatmap有点东西
  • MySQL初阶:查询进阶