c++两个线程,一个线程写队列,一个线程读队列,demo
时间: 2023-08-04 07:36:36 浏览: 133
基于VS2010的C++多线程开发Demo
4星 · 用户满意度95%
好的,下面是一个简单的C++代码示例,使用一个线程写队列,另一个线程读队列:
```c++
#include <iostream>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>
std::queue<int> my_queue;
std::mutex mtx;
std::condition_variable cv;
void producer()
{
for (int i = 0; i < 10; ++i)
{
{
std::lock_guard<std::mutex> lk(mtx);
my_queue.push(i);
std::cout << "Producer pushed " << i << std::endl;
}
cv.notify_one();
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
void consumer()
{
while (true)
{
std::unique_lock<std::mutex> lk(mtx);
cv.wait(lk, []{return !my_queue.empty();});
int val = my_queue.front();
my_queue.pop();
std::cout << "Consumer popped " << val << std::endl;
lk.unlock();
}
}
int main()
{
std::thread t1(producer);
std::thread t2(consumer);
t1.join();
t2.join();
return 0;
}
```
在这个示例中,`producer()`函数向队列中推送值,`consumer()`函数从队列中弹出值。`std::mutex`和`std::condition_variable`用于同步和线程间通信。`std::lock_guard`和`std::unique_lock`用于锁定互斥量,避免多个线程同时访问队列。`std::this_thread::sleep_for`用于模拟生产者生产元素的时间成本。`cv.wait()`用于阻塞消费者线程,直到队列中有元素可供消费。
阅读全文