- 条件变量实现
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>
const int kMaxBufferSize = 5;
std::mutex mtx;
std::condition_variable condVar;
std::queue<int> buffer;
void producer(int id) {
for (int i = 0; i < 10; ++i) {
std::unique_lock<std::mutex> lock(mtx);
condVar.wait(lock, [] { return buffer.size() < kMaxBufferSize; });
int item = i + id * 10;
buffer.push(item);
std::cout << "Producer " << id << " produced " << item << std::endl;
condVar.notify_one();
}
}
void consumer(int id) {
for (int i = 0; i < 10; ++i) {
std::unique_lock<std::mutex> lock(mtx);
condVar.wait(lock, [] { return !buffer.empty(); });
int item = buffer.front();
buffer.pop();
std::cout << "Consumer " << id << " consumed " << item << std::endl;
condVar.notify_one();
}
}
int main() {
std::thread producer1(producer, 1);
std::thread producer2(producer, 2);
std::thread consumer1(consumer, 1);
std::thread consumer2(consumer, 2);
producer1.join();
producer2.join();
consumer1.join();
consumer2.join();
return 0;
}
- 信号量实现
互斥锁和信号量可以完全替代信号量,实际项目中不用