操作系统生产者消费者问题代码
时间: 2023-11-12 13:03:09 浏览: 43
下面是一个简单的生产者-消费者问题的代码实现,使用互斥锁和条件变量来同步和控制访问共享资源:
```c++
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>
std::mutex mtx;
std::condition_variable cv;
std::queue<int> q;
const int MAX_QUEUE_SIZE = 10;
bool done = false;
void producer() {
for (int i = 1; i <= 20; ++i) {
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, []{ return q.size() != MAX_QUEUE_SIZE; });
q.push(i);
std::cout << "Produced: " << i << std::endl;
cv.notify_one();
}
}
void consumer() {
while (!done) {
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, []{ return !q.empty(); });
int val = q.front();
q.pop();
std::cout << "Consumed: " << val << std::endl;
cv.notify_one();
}
}
int main() {
std::thread t1(producer);
std::thread t2(consumer);
t1.join();
done = true;
cv.notify_one();
t2.join();
return 0;
}
```
在此实现中,生产者线程向队列中加入数字,而消费者线程从队列中取出数字。当队列满时,生产者线程会等待消费者线程取走数字后再继续生产;当队列为空时,消费者线程会等待生产者线程添加数字后再继续消费。使用互斥锁和条件变量,可以保证线程之间的同步和顺序执行。