OSDN Git Service

fa81bf8e41b0c3da39e792d67b0e236e1c8ab386
[ultramonkey-l7/ultramonkey-l7-v3.git] / snmpagent / lockedqueue.h
1 #ifndef __LOCKEDQUEUE_H__
2 #define __LOCKEDQUEUE_H__
3
4 #include <queue>
5 #include <deque>
6 #include <pthread.h>
7
8 template < typename T, typename _Seq = std::deque<T> >
9 class lockedqueue;
10
11 template<typename T, typename _Seq>
12 class lockedqueue
13 {
14         typedef typename _Seq::value_type   value_type;
15         typedef typename _Seq::reference    reference;
16         typedef typename _Seq::size_type    size_type;
17
18 private:
19         pthread_mutex_t     mtx;
20         std::queue<T, _Seq>  que;
21
22 protected:
23
24 public:
25         lockedqueue() {
26                 pthread_mutex_init(&mtx, NULL);
27         }
28         ~lockedqueue() {}
29
30         bool
31         empty() const {
32                 return que.empty();
33         }
34
35         size_type
36         size() const {
37                 return que.size();
38         }
39
40         reference
41         front() {
42                 return que.front();
43         }
44
45         void
46         push(const value_type &_data) {
47                 pthread_mutex_lock(&mtx);
48                 que.push(_data);
49                 pthread_mutex_unlock(&mtx);
50         }
51
52         void
53         pop() {
54                 pthread_mutex_lock(&mtx);
55                 que.pop();
56                 pthread_mutex_unlock(&mtx);
57         }
58
59 };
60
61 #endif//__LOCKEDQUEUE_H__
62