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