16 pthread_mutex_init(&_mutex
, NULL
);
17 pthread_cond_init(&_condvar
, NULL
);
22 pthread_cond_destroy(&_condvar
);
23 pthread_mutex_destroy(&_mutex
);
26 void enqueue(const T
&elem
)
28 pthread_mutex_lock(&_mutex
);
30 pthread_mutex_unlock(&_mutex
);
31 pthread_cond_signal(&_condvar
);
34 bool dequeue(T
& elem
, int msec
= TIMEOUT_FOREVER
)
38 pthread_mutex_lock(&_mutex
);
39 if (msec
!= TIMEOUT_FOREVER
) {
40 struct timespec abstime
;
41 calc_abstimeout(msec
, &abstime
);
42 while (rc
== 0 && _queue
.empty())
43 rc
= pthread_cond_timedwait(&_condvar
, &_mutex
, &abstime
);
45 while (rc
== 0 && _queue
.empty())
46 rc
= pthread_cond_wait(&_condvar
, &_mutex
);
50 pthread_mutex_unlock(&_mutex
);
54 elem
= _queue
.first();
55 _queue
.remove_first();
56 pthread_mutex_unlock(&_mutex
);
62 pthread_mutex_lock(&_mutex
);
65 while (rc
== 0 && _queue
.empty())
66 rc
= pthread_cond_wait(&_condvar
, &_mutex
);
68 T elem
= _queue
.first();
69 _queue
.remove_first();
70 pthread_mutex_unlock(&_mutex
);
76 pthread_mutex_lock(&_mutex
);
77 bool tmp
= _queue
.empty();
78 pthread_mutex_unlock(&_mutex
);
84 pthread_mutex_lock(&_mutex
);
86 pthread_mutex_unlock(&_mutex
);
91 static const int TIMEOUT_FOREVER
= -1;
92 pthread_mutex_t _mutex
;
93 pthread_cond_t _condvar
;
97 aqueue(const aqueue
<T
> &rhs
);
98 aqueue
<T
> &operator=(const aqueue
<T
> &rhs
);