当前位置: 首页 > 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

相关文章:

  • 【实战】基于 ABP vNext 构建高可用 S7 协议采集平台(西门子 PLC 通信全流程)
  • VR和眼动控制集群机器人的方法
  • Flannel Host-gw模式的优缺点
  • 生成式图像水印研究综述
  • 一键转换上百文件 Word 批量转 PDF 软件批量工具
  • C程序的存储空间分配
  • 【OpenCV】网络模型推理的简单流程分析(readNetFromONNX、setInput和forward等)
  • 大容量存储的高性能 T-BOX 方案对智能网联汽车的支撑
  • 汽车工厂数字孪生实时监控技术从数据采集到三维驱动实现
  • 数字孪生实时监控汽车零部件工厂智能化巡检新范式
  • 修改(替换)文件中的指定内容并保留文件修改前的时间(即修改前后文件的最后修改时间保持不变)
  • [学习] RTKLib详解:qzslex.c、rcvraw.c与solution.c
  • matlab多智能体网络一致性研究
  • Linux(1)编译链接和gcc
  • 动态域名服务ddns怎么设置?如何使用路由器动态域名解析让外网访问内网?
  • Vitrualbox完美显示系统界面(只需三步)
  • 【源码+文档+调试讲解】党员之家服务系统小程序1
  • 数据治理域——日志数据采集设计
  • k8s之k8s集群部署
  • 【漫话机器学习系列】257.填补缺失值(Imputing Missing Values)
  • 反制美国钢铝关税!印度拟对美国部分商品征收关税
  • 马上评丨未成年人“擦边”短视频岂能成流量密码
  • 为证明我爸是我爸,我将奶奶告上法庭
  • 重庆大学通报本科生发14篇SCI论文:涉事学生及其父亲被处理
  • 巴西总统卢拉将访华
  • 习近平会见古共中央第一书记、古巴国家主席迪亚斯-卡内尔