线程队列的封装
C++中虽然有std::queue、std::deque这些队列容器,但是不是线程安全的,因此我们需要封装一个线程安全的线程队列。
定义
template <class T, class Container = std::queue<T>>
class YR_Thread_Queue : protected YR_ThreadLock
{
public:
typedef Container queue_type;
YR_Thread_Queue() : _size(0){ }
public:
void push_front(const T& t);
void push_front(const queue_type& qt);
void push_back(const T& t);
void push_back(const queue_type& qt);
//从头部获取数据,没有数据则等待
//millsecond为阻塞等待时间,0为不阻塞,-1为永久等待
bool pop_front(T& t, int millsecond = 0);
size_t size() const { Lock lock(*this); return _size;}
void clear() { Lock lock(*this); _queue.clear();_size=0;}
bool empty() { Lock lock(*this); return _queue.empty();}
private:
//队列
queue_type _queue;
//队列长度
size_t _size;
};