c++ 互斥访问队列
时间: 2023-08-04 16:14:36 浏览: 88
在 C++ 中,可以使用互斥锁(mutex)来保证队列的安全访问。具体实现步骤如下:
1. 定义一个队列,并在需要访问队列的代码中使用互斥锁来保护队列。
```c++
#include <iostream>
#include <queue>
#include <mutex>
#include <thread>
std::queue<int> q;
std::mutex mtx;
void produce(int value) {
std::lock_guard<std::mutex> lock(mtx);
q.push(value);
std::cout << "produced: " << value << std::endl;
}
void consume() {
while (true) {
std::lock_guard<std::mutex> lock(mtx);
if (!q.empty()) {
int value = q.front();
q.pop();
std::cout << "consumed: " << value << std::endl;
}
}
}
int main() {
std::thread consumer(consume);
for (int i = 0; i < 10; ++i) {
std::thread producer(produce, i);
producer.join();
}
consumer.join();
return 0;
}
```
2. 在生产者线程中,使用 `std::lock_guard` 对互斥锁进行加锁,然后将数据放入队列中。
3. 在消费者线程中,使用 `std::lock_guard` 对互斥锁进行加锁,然后从队列中取出数据进行消费。
4. 在主函数中,创建一个消费者线程和多个生产者线程,然后等待线程执行完成。
上述代码实现了一个简单的生产者消费者模型,其中互斥锁保证了队列的安全访问。
阅读全文