C++如何将队列锁死
时间: 2024-10-13 08:03:25 浏览: 21
在C++中,为了保护队列数据结构不被并发访问,通常会使用互斥量(mutex)或者其他同步原语(如条件变量、读写锁等)。队列锁死是指在对队列进行操作(如入队、出队)时,确保在同一时刻只有一个线程可以执行这些操作,避免数据竞争和不确定的行为。
以下是一个简单的例子,使用`std::queue`和`std::mutex`来实现队列的锁定:
```cpp
#include <queue>
#include <mutex>
class LockedQueue {
private:
std::queue<int> queue_;
mutable std::mutex mutex_; // 互斥量用于同步
public:
void enqueue(int value) {
std::lock_guard<std::mutex> lock(mutex_); // 锁定队列
queue_.push(value);
}
int dequeue() {
std::unique_lock<std::mutex> lock(mutex_); // 锁定队列
if (queue_.empty()) {
throw std::runtime_error("Queue is empty");
}
int value = queue_.front();
queue_.pop();
return value;
}
};
```
在这个例子中,`enqueue`和`dequeue`方法都首先获取互斥量的独占所有权(通过`lock_guard`或`unique_lock`),然后执行相应的操作。当一个线程正在队列上工作时,其他线程会被阻塞,直到第一个线程释放了锁。
阅读全文