ConcurrentQueue
用C++11提供的多线程类实现一个线程安全的队列:
#include <queue>
#include <mutex>
#include <condition_variable>
#include <utility>
template<typename T, typename Queue = std::queue<T>>
class ConcurrentQueue {
public:
template<typename U>
void push(U&& elem) {
{
std::lock_guard<std::mutex> guard(m_mutex);
m_queue.push(std::forward<U>(elem));
}
m_cv.notify_one();
}
T pop() {
std::unique_lock<std::mutex> lock(m_mutex);
m_cv.wait(lock, [this] { return !m_queue.empty(); });
auto elem = std::move(m_queue.front());
m_queue.pop();
return elem;
}
private:
std::mutex m_mutex;
std::condition_variable m_cv;
Queue m_queue;
};
原文链接: https://www.cnblogs.com/HachikoT/p/13828803.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/204025
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!