list_clr(&queue->lst, iter, arg, trans);
}
-bool queue_enq(Queue *queue, void *dat)
-{
- bool success = false;
-
- pthread_mutex_lock(&queue->mtx);
- if (!queue->fin) {
- success = true;
- list_apd(&queue->lst, dat);
- pthread_cond_signal(&queue->cnd);
+#define ENQUEUE(queue_fun, list_fun) \
+ bool queue_fun(Queue *queue, void *dat) \
+ { \
+ bool success = false; \
+ \
+ pthread_mutex_lock(&queue->mtx); \
+ if (!queue->fin) { \
+ success = true; \
+ list_fun(&queue->lst, dat); \
+ pthread_cond_signal(&queue->cnd); \
+ } \
+ pthread_mutex_unlock(&queue->mtx); \
+ \
+ return success; \
}
- pthread_mutex_unlock(&queue->mtx);
- return success;
-}
+ENQUEUE(queue_enq, list_apd)
+ENQUEUE(queue_ppd, list_ppd)
+
+#undef ENQUEUE
void *queue_deq(Queue *queue, void *trans)
{
Notifies waiting consumer threads.
*/
+bool queue_ppd(Queue *queue, void *dat);
+/*
+ [Thread Safe]
+ Enqueues an element at the front of the queue.
+ Returns true if the enqueueing was successful (this is always the case if queue_fin
+ has not been called)
+
+ Notifies waiting consumer threads.
+*/
+
void *queue_deq(Queue *queue, void *trans);
/*
[Thread Safe]