3 #ifndef __UNIT_QUEUE_STD_QUEUE_H
4 #define __UNIT_QUEUE_STD_QUEUE_H
7 #include <cds/lock/spinlock.h>
11 template <typename T, class Container, class Lock = cds::lock::Spin >
12 class StdQueue: public std::queue<T, Container >
14 typedef std::queue<T, Container > base_class;
18 bool enqueue( const T& data )
20 cds::lock::scoped_lock<Lock> a(m_Locker);
22 base_class::push( data );
25 bool push( const T& data ) { return enqueue( data ) ; }
26 bool dequeue( T& data )
28 cds::lock::scoped_lock<Lock> a(m_Locker);
29 if ( base_class::empty() )
32 data = base_class::front();
36 bool pop( T& data ) { return dequeue( data ) ; }
38 cds::opt::none statistics() const
40 return cds::opt::none();
44 template <typename T, class Lock = cds::lock::Spin >
45 class StdQueue_deque: public StdQueue<T, std::deque<T>, Lock >
48 template <typename T, class Lock = cds::lock::Spin >
49 class StdQueue_list: public StdQueue<T, std::list<T>, Lock >
53 #endif // #ifndef __UNIT_QUEUE_STD_QUEUE_H