3 #ifndef CDSUNIT_QUEUE_STD_QUEUE_H
4 #define CDSUNIT_QUEUE_STD_QUEUE_H
6 #include <mutex> //unique_lock
8 #include <cds/lock/spinlock.h>
12 template <typename T, class Container, class Lock = cds::lock::Spin >
13 class StdQueue: public std::queue<T, Container >
15 typedef std::queue<T, Container > base_class;
19 bool enqueue( const T& data )
21 std::unique_lock<Lock> a(m_Locker);
23 base_class::push( data );
26 bool push( const T& data ) { return enqueue( data ) ; }
27 bool dequeue( T& data )
29 std::unique_lock<Lock> a(m_Locker);
30 if ( base_class::empty() )
33 data = base_class::front();
37 bool pop( T& data ) { return dequeue( data ) ; }
39 cds::opt::none statistics() const
41 return cds::opt::none();
45 template <typename T, class Lock = cds::lock::Spin >
46 class StdQueue_deque: public StdQueue<T, std::deque<T>, Lock >
49 template <typename T, class Lock = cds::lock::Spin >
50 class StdQueue_list: public StdQueue<T, std::list<T>, Lock >
54 #endif // #ifndef CDSUNIT_QUEUE_STD_QUEUE_H