在C++中,没有直接提供可等待的队列。然而,可以通过使用条件变量和互斥锁来实现一个可等待的队列。
可等待的队列是一种数据结构,允许线程在队列为空时等待,直到有新的元素被添加到队列中。当队列非空时,等待的线程将被唤醒并可以继续执行。
以下是一个简单的示例代码,展示了如何实现一个可等待的队列:
#include <queue>
#include <mutex>
#include <condition_variable>
template <typename T>
class WaitableQueue {
public:
void push(const T& item) {
std::unique_lock<std::mutex> lock(mutex_);
queue_.push(item);
lock.unlock();
condition_.notify_one();
}
T pop() {
std::unique_lock<std::mutex> lock(mutex_);
condition_.wait(lock, [this] { return !queue_.empty(); });
T item = queue_.front();
queue_.pop();
return item;
}
private:
std::queue<T> queue_;
std::mutex mutex_;
std::condition_variable condition_;
};
在上述代码中,我们使用了一个std::queue作为底层数据结构,并使用std::mutex和std::condition_variable来实现线程之间的同步和等待。
使用该可等待的队列,可以在多线程环境下安全地进行数据交换和同步。例如,一个线程可以使用push()函数将数据添加到队列中,而另一个线程可以使用pop()函数从队列中获取数据。如果队列为空,pop()函数将会阻塞线程,直到有新的数据可用。
这是一个基本的可等待队列的实现,可以根据具体需求进行扩展和优化。在实际应用中,可以根据具体场景选择合适的数据结构和同步机制。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云