microsoft visual c++2010 用C语言编程实现生产者-消费者问题
时间: 2024-10-25 07:04:43 浏览: 7
C语言编程模拟生产者和消费者问题.pdf
Microsoft Visual C++ 2010 是一款由微软公司开发的集成开发环境 (IDE),主要用于编写C++和其他Windows平台上的应用程序。它是Visual Studio系列的一部分,提供了丰富的工具集,包括编辑器、调试器、构建系统等,支持C++标准库,并优化了对C++10特性的支持。
"生产者-消费者问题"是一个经典的并发控制问题,它涉及到两个线程角色:生产者负责生成数据放入共享资源(如队列),而消费者则从这个资源中取出并消费数据。在C++中实现这个问题,通常会利用条件变量(mutex, condition_variable, atomic)来保证线程间的同步,避免数据竞争。下面是一个简单的示例:
```cpp
#include <iostream>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
std::queue<int> buffer;
std::mutex mtx; // 互斥锁
std::condition_variable cv_prod, cv_cons;
void producer(int n) {
for (int i = 0; i < n; ++i) {
std::unique_lock<std::mutex> lock(mtx);
cv_prod.wait(lock, [] { return !buffer.empty() || cv_cons.wait_for(lock, std::chrono::seconds(1)) == std::cv_status::timeout; });
buffer.push(i);
std::cout << "Producer produced: " << i << '\n';
lock.unlock();
cv_cons.notify_one(); // 通知消费者有新元素可用
}
}
void consumer() {
while (true) {
std::unique_lock<std::mutex> lock(mtx);
cv_cons.wait(lock, [] { return !buffer.empty(); });
int data = buffer.front();
buffer.pop();
std::cout << "Consumer consumed: " << data << '\n';
lock.unlock();
cv_prod.notify_one(); // 通知生产者消费者已经处理完当前元素
}
}
int main() {
std::thread producer_thread(producer, 10);
std::thread consumer_thread(consumer);
producer_thread.join();
consumer_thread.join();
return 0;
}
```
在这个例子中,`producer` 和 `consumer` 函数分别代表生产者和消费者的行为,通过条件变量实现了同步和通信。
阅读全文