#include
template
typedef typename std::queue<T, Container> queue_t;
typedef typename queue_t::value_type value_type;
protected:
queue_t m_queue;
std::atomic_flag lock = ATOMIC_FLAG_INIT; // 初始化为清零状态
public:
void push(const value_type& value)
{
while (lock.test_and_set(std::memory_order_acquire)); // 获取锁
m_queue.push(value);
lock.clear(std::memory_order_release); // 释放锁
}
bool try_pop(value_type& result)
{
while (lock.test_and_set(std::memory_order_acquire)); // 获取锁
if (!m_queue.empty())
{
result = m_queue.front();
m_queue.pop();
lock.clear(std::memory_order_release); // 释放锁
return true;
}
else
{
lock.clear(std::memory_order_release); // 释放锁
return false;
}
}
};
// 其他代码省略




