Me@0: /* Me@0: * Copyright 2009 OpenSourceStewardshipFoundation.org Me@0: * Licensed under GNU General Public License version 2 Me@0: * Me@0: * Author: seanhalle@yahoo.com Me@0: */ Me@0: Me@0: #ifndef _BLOCKING_QUEUE_H Me@0: #define _BLOCKING_QUEUE_H Me@0: Me@0: #include Me@0: Me@0: #define TRUE 1 Me@0: #define FALSE 0 Me@0: Me@0: #define LOCKED 1 Me@0: #define UNLOCKED 0 Me@0: Me@0: Me@0: /* It is the data that is shared so only need one mutex. */ Me@0: typedef Me@0: struct Me@0: { Me@0: pthread_mutex_t mutex_t; Me@0: pthread_cond_t cond_w_t; Me@0: pthread_cond_t cond_r_t; Me@0: int count; Me@0: int readPos; Me@0: int writePos; Me@0: void* data[1024]; //an array of pointers Me@0: int w_empty; Me@0: int w_full; Me@0: } Me@0: QueueStruc; Me@0: Me@0: Me@0: typedef Me@0: struct Me@0: { int insertLock; Me@0: int extractLock; Me@0: void* *insertPos; Me@0: void* *extractPos; Me@0: void* startOfData[1024]; //data is pointers Me@0: void* *endOfData; //set when make queue Me@0: } Me@0: CASQueueStruc; Me@0: Me@0: Me@0: typedef Me@0: struct Me@0: { void* *insertPos; Me@0: void* *extractPos; Me@0: void* startOfData[1024]; //data is pointers Me@0: void* *endOfData; //set when make queue Me@0: } Me@0: SRSWQueueStruc; Me@0: Me@0: Me@0: QueueStruc* makeQ(); Me@0: void* readQ( QueueStruc *Q ); Me@0: void writeQ( void *in, QueueStruc *Q ); Me@0: Me@0: CASQueueStruc* makeCASQ(); Me@0: void* readCASQ( CASQueueStruc *Q ); Me@0: void writeCASQ( void *in, CASQueueStruc *Q ); Me@0: Me@0: SRSWQueueStruc* makeSRSWQ(); Me@0: void* readSRSWQ( SRSWQueueStruc *Q ); Me@0: void writeSRSWQ( void *in, SRSWQueueStruc *Q ); Me@0: Me@0: #endif /* _BLOCKING_QUEUE_H */ Me@0: