Mercurial > cgi-bin > hgwebdir.cgi > PR > PR_Implementations > PR__Univ > PR__includes > PR__include
annotate prqueue.h @ 0:d460a47ed2d6
public headers for the initial ML split into libraries, as seed for Univ
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Thu, 08 Aug 2013 02:39:56 -0700 |
| parents | |
| children | 14241f07f742 |
| rev | line source |
|---|---|
| seanhalle@0 | 1 /* |
| seanhalle@0 | 2 * Copyright 2009 OpenSourceResearchInstitute.org |
| seanhalle@0 | 3 * Licensed under GNU General Public License version 2 |
| seanhalle@0 | 4 * |
| seanhalle@0 | 5 * Author: seanhalle@yahoo.com |
| seanhalle@0 | 6 */ |
| seanhalle@0 | 7 |
| seanhalle@0 | 8 #ifndef _PRQUEUE_H |
| seanhalle@0 | 9 #define _PRQUEUE_H |
| seanhalle@0 | 10 |
| seanhalle@0 | 11 #include <PR__include/PR__primitive_data_types.h> |
| seanhalle@0 | 12 #include <pthread.h> |
| seanhalle@0 | 13 |
| seanhalle@0 | 14 #define TRUE 1 |
| seanhalle@0 | 15 #define FALSE 0 |
| seanhalle@0 | 16 |
| seanhalle@0 | 17 //================== Private Queue stuff =================== |
| seanhalle@0 | 18 /* It is the data that is shared so only need one mutex. */ |
| seanhalle@0 | 19 typedef struct |
| seanhalle@0 | 20 { void **insertPos; |
| seanhalle@0 | 21 void **extractPos; |
| seanhalle@0 | 22 void **startOfData; //data is pointers |
| seanhalle@0 | 23 void **endOfData; //set when alloc data |
| seanhalle@0 | 24 } |
| seanhalle@0 | 25 PrivQueueStruc; |
| seanhalle@0 | 26 |
| seanhalle@0 | 27 typedef void (*DynArrayFnPtr) ( void * ); //fn has to cast void * |
| seanhalle@0 | 28 |
| seanhalle@0 | 29 PrivQueueStruc* makePrivQ ( ); |
| seanhalle@0 | 30 bool32 isEmptyPrivQ ( PrivQueueStruc *Q ); //ret TRUE if empty |
| seanhalle@0 | 31 void* peekPrivQ ( PrivQueueStruc *Q ); //ret NULL if empty |
| seanhalle@0 | 32 void* readPrivQ ( PrivQueueStruc *Q ); //ret NULL if empty |
| seanhalle@0 | 33 void writePrivQ( void *in, PrivQueueStruc *Q ); |
| seanhalle@0 | 34 //return false when full |
| seanhalle@0 | 35 bool32 writeIfSpacePrivQ( void * in, PrivQueueStruc* Q ); |
| seanhalle@0 | 36 int32 numInPrivQ( PrivQueueStruc *Q ); |
| seanhalle@0 | 37 void pushPrivQ( void * in, PrivQueueStruc* Q ); |
| seanhalle@0 | 38 void freePrivQ( PrivQueueStruc *Q ); |
| seanhalle@0 | 39 |
| seanhalle@0 | 40 |
| seanhalle@0 | 41 //====================== Parallel Queue Stuff ==================== |
| seanhalle@0 | 42 |
| seanhalle@0 | 43 //========== pThreads based queue ========== |
| seanhalle@0 | 44 /* It is the data that is shared so only need one mutex. */ |
| seanhalle@0 | 45 typedef |
| seanhalle@0 | 46 struct |
| seanhalle@0 | 47 { pthread_mutex_t mutex_t; |
| seanhalle@0 | 48 pthread_cond_t cond_w_t; |
| seanhalle@0 | 49 pthread_cond_t cond_r_t; |
| seanhalle@0 | 50 int32 count; |
| seanhalle@0 | 51 int32 readPos; |
| seanhalle@0 | 52 int32 writePos; |
| seanhalle@0 | 53 void* data[1024]; //an array of pointers |
| seanhalle@0 | 54 int w_empty; |
| seanhalle@0 | 55 int w_full; |
| seanhalle@0 | 56 } |
| seanhalle@0 | 57 PThdQueueStruc; |
| seanhalle@0 | 58 |
| seanhalle@0 | 59 PThdQueueStruc* makePThdQ(); |
| seanhalle@0 | 60 void* readPThdQ( PThdQueueStruc *Q ); |
| seanhalle@0 | 61 void writePThdQ( void *in, PThdQueueStruc *Q ); |
| seanhalle@0 | 62 |
| seanhalle@0 | 63 |
| seanhalle@0 | 64 //========== CAS based queue ========== |
| seanhalle@0 | 65 typedef |
| seanhalle@0 | 66 struct |
| seanhalle@0 | 67 { volatile int32 insertLock; |
| seanhalle@0 | 68 volatile int32 extractLock; |
| seanhalle@0 | 69 volatile void* *insertPos; |
| seanhalle@0 | 70 volatile void* *extractPos; |
| seanhalle@0 | 71 void* startOfData[1024]; //data is pointers |
| seanhalle@0 | 72 void* *endOfData; //set when make queue |
| seanhalle@0 | 73 } |
| seanhalle@0 | 74 CASQueueStruc; |
| seanhalle@0 | 75 |
| seanhalle@0 | 76 CASQueueStruc* makeCASQ(); |
| seanhalle@0 | 77 void* readCASQ( CASQueueStruc *Q ); |
| seanhalle@0 | 78 void writeCASQ( void *in, CASQueueStruc *Q ); |
| seanhalle@0 | 79 |
| seanhalle@0 | 80 |
| seanhalle@0 | 81 //========= non-atomic instr based queue =========== |
| seanhalle@0 | 82 typedef |
| seanhalle@0 | 83 struct |
| seanhalle@0 | 84 { void* *insertPos; |
| seanhalle@0 | 85 void* *extractPos; |
| seanhalle@0 | 86 void* startOfData[1024]; //data is pointers |
| seanhalle@0 | 87 void* *endOfData; //set when make queue |
| seanhalle@0 | 88 } |
| seanhalle@0 | 89 SRSWQueueStruc; |
| seanhalle@0 | 90 |
| seanhalle@0 | 91 SRSWQueueStruc* makeSRSWQ(); |
| seanhalle@0 | 92 void freeSRSWQ( SRSWQueueStruc* Q ); |
| seanhalle@0 | 93 void* readSRSWQ( SRSWQueueStruc *Q ); |
| seanhalle@0 | 94 void writeSRSWQ( void *in, SRSWQueueStruc *Q ); |
| seanhalle@0 | 95 |
| seanhalle@0 | 96 |
| seanhalle@0 | 97 //========= non-atomic instr S R M W queue =========== |
| seanhalle@0 | 98 typedef |
| seanhalle@0 | 99 struct |
| seanhalle@0 | 100 { int32 lastQReadFrom; |
| seanhalle@0 | 101 int32 numInternalQs; |
| seanhalle@0 | 102 int32 internalQsSz; |
| seanhalle@0 | 103 SRSWQueueStruc* *internalQs; |
| seanhalle@0 | 104 } |
| seanhalle@0 | 105 SRMWQueueStruc; |
| seanhalle@0 | 106 |
| seanhalle@0 | 107 SRMWQueueStruc* makeSRMWQ(); |
| seanhalle@0 | 108 int addWriterToSRMWQ( SRMWQueueStruc *Q ); |
| seanhalle@0 | 109 void* readSRMWQ( SRMWQueueStruc *Q ); |
| seanhalle@0 | 110 void writeSRMWQ( void *in, SRMWQueueStruc *Q, int writerID ); |
| seanhalle@0 | 111 |
| seanhalle@0 | 112 |
| seanhalle@0 | 113 #endif /* _PRIVATE_QUEUE_H */ |
| seanhalle@0 | 114 |
