00001 #ifndef __THRQUEUE_H
00002 #define __THRQUEUE_H
00003
00004 #include <sys/queue.h>
00005
00006 STAILQ_HEAD(QueueHead,QueueEntry);
00007
00008 struct Queue {
00009 pthread_mutex_t mutex;
00010 pthread_cond_t cv;
00011 pthread_cond_t enq_wait_cv;
00012 int enq_waiters;
00013 int length;
00014 int limit;
00015 int pool_length;
00016 int pool_limit;
00017 struct QueueHead queue;
00018 struct QueueHead pool;
00019 };
00020
00021 struct QueueEntry {
00022 void *item;
00023 STAILQ_ENTRY(QueueEntry) entries;
00024 };
00025
00026 struct Queue* queue_init();
00027 int queue_destroy(struct Queue *q);
00028 int queue_empty(struct Queue *q);
00029 int queue_full(struct Queue *q);
00030 int queue_enq(struct Queue *q, void *item);
00031 int queue_length(struct Queue *q);
00032 int queue_pool_length(struct Queue *q);
00033 void queue_limit(struct Queue *q, int limit);
00034 void queue_pool_limit(struct Queue *q, int limit);
00035 void *queue_deq(struct Queue *q);
00036
00037 #endif