c++ 线程安全队列 不使用 condition_variable
时间: 2024-06-10 08:09:45 浏览: 89
线程安全队列是一种数据结构,可以在多线程环境下安全地添加和删除元素。它通常使用互斥锁来保护队列的访问。使用 condition_variable 可以更好地控制线程的等待和唤醒,但也可以使用其他同步机制来实现线程安全队列。
以下是一个使用互斥锁的线程安全队列实现:
```c++
#include <queue>
#include <mutex>
template<typename T>
class ThreadSafeQueue {
public:
ThreadSafeQueue() {}
void push(const T& value) {
std::lock_guard<std::mutex> lock(mutex_);
queue_.push(value);
}
bool try_pop(T& value) {
std::lock_guard<std::mutex> lock(mutex_);
if (queue_.empty())
return false;
value = queue_.front();
queue_.pop();
return true;
}
bool empty() {
std::lock_guard<std::mutex> lock(mutex_);
return queue_.empty();
}
private:
std::queue<T> queue_;
std::mutex mutex_;
};
```
这个线程安全队列使用了 std::queue 和 std::mutex。 push() 和 try_pop() 方法使用互斥锁来保护队列的访问。 empty() 方法只是为了方便检查队列是否为空,也使用了互斥锁。
在多线程环境下,可以使用 ThreadSafeQueue 实例来安全地添加和删除元素:
```c++
ThreadSafeQueue<int> q;
// 在一个线程中添加元素
q.push(1);
// 在另一个线程中删除元素
int value = 0;
if (q.try_pop(value)) {
// 处理 value
}
```
阅读全文