🌷🌷🌷🌷① 生产者-消费者问题
🌷🌷🌷🌷② 读写锁问题
🌷🌷🌷🌷③ 线程池问题
① 生产者-消费者问题
生产者-消费者问题是一个经典的并发编程问题,它涉及到多个线程对共享缓冲区的访问和操作。在该问题中,生产者线程负责向缓冲区中写入数据,而消费者线程负责从缓冲区中读取数据。由于生产者和消费者线程都要访问同一个缓冲区,因此需要采取合适的同步和互斥机制来避免数据竞争问题的发生。以下是一个使用std::mutex和std::condition_variable类实现生产者-消费者问题的代码例子:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>
std::mutex mtx;
std::condition_variable cv;
std::queue<int> buffer;
void producer() {
for (int i = 0; i < 10; ++i) {
std::unique_lock<std::mutex> lock(mtx);
buffer.push(i);
std::cout << "Produced: " << i << std::endl;
cv.notify_all();
}
}
void consumer() {
for (int i = 0; i < 10; ++i) {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return !buffer.empty(); });
int data = buffer.front();
buffer.pop();
std::cout << "Consumed: " << data << std::endl;
}
}
int main() {
std::thread t1(producer);
std::thread t2(consumer);
t1.join();
t2.join();
return 0;
}
在该代码例子中,生产者线程向缓冲区中写入数据,然后通知消费者线程有数据可读。消费者线程在读取数据之前需要等待生产者线程将数据写入缓冲区,并且在读取完数据之后需要通知生产者线程有空间可写。