C++线程安全队列是一种在多线程环境下能够安全地进行数据存取的队列数据结构。它通过特定的同步机制来保证多个线程可以并发地访问队列而不会导致数据不一致或其他并发问题。
线程安全队列通常使用锁(如互斥锁mutex)或其他同步原语(如条件变量condition variable)来保护队列的内部状态,确保在任何时刻只有一个线程能够修改队列。
#include <queue>
#include <mutex>
#include <condition_variable>
template<typename T>
class ThreadSafeQueue {
public:
void push(const T& value) {
std::lock_guard<std::mutex> lock(mutex_);
queue_.push(value);
cond_var_.notify_one();
}
bool try_pop(T& value) {
std::lock_guard<std::mutex> lock(mutex_);
if (queue_.empty()) {
return false;
}
value = queue_.front();
queue_.pop();
return true;
}
void wait_and_pop(T& value) {
std::unique_lock<std::mutex> lock(mutex_);
cond_var_.wait(lock, [this] { return !queue_.empty(); });
value = queue_.front();
queue_.pop();
}
private:
std::queue<T> queue_;
mutable std::mutex mutex_;
std::condition_variable cond_var_;
};
std::shared_mutex
)来优化读多写少的场景。通过上述方法,可以有效地实现和使用线程安全队列,提高多线程程序的性能和稳定性。
领取专属 10元无门槛券
手把手带您无忧上云