在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