Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > Queue_impl
comparison BlockingQueue.c @ 38:b66352de717e
Updated default branch to working versions of all the sub repos
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Mon, 10 Sep 2012 01:11:54 -0700 |
| parents | 7d35d7f42cd5 |
| children | a7a6e170708c |
comparison
equal
deleted
inserted
replaced
| 15:69a5b2c0de8f | 16:7983830770e8 |
|---|---|
| 71 //if not empty -- extract just below insert when empty | 71 //if not empty -- extract just below insert when empty |
| 72 if( insertPos - extractPos != 1 && | 72 if( insertPos - extractPos != 1 && |
| 73 !(extractPos == endOfData && insertPos == startOfData)) | 73 !(extractPos == endOfData && insertPos == startOfData)) |
| 74 { //move before read | 74 { //move before read |
| 75 if( extractPos == endOfData ) //write new pos exactly once, correctly | 75 if( extractPos == endOfData ) //write new pos exactly once, correctly |
| 76 { Q->extractPos = startOfData; //can't overrun then fix it 'cause | 76 { Q->extractPos = (volatile void **)startOfData; |
| 77 } // other thread might read bad pos | 77 } |
| 78 else | 78 else |
| 79 { Q->extractPos++; | 79 { Q->extractPos++; |
| 80 } | 80 } |
| 81 out = (void *) *(Q->extractPos); | 81 out = (void *) *(Q->extractPos); |
| 82 Q->extractLock = UNLOCKED; | 82 Q->extractLock = UNLOCKED; |
| 117 // 'cause both insertor Thd and extractor Thd would write it | 117 // 'cause both insertor Thd and extractor Thd would write it |
| 118 if( extractPos - insertPos != 1 && | 118 if( extractPos - insertPos != 1 && |
| 119 !(insertPos == endOfData && extractPos == startOfData)) | 119 !(insertPos == endOfData && extractPos == startOfData)) |
| 120 { *(Q->insertPos) = in; //insert before move | 120 { *(Q->insertPos) = in; //insert before move |
| 121 if( insertPos == endOfData ) | 121 if( insertPos == endOfData ) |
| 122 { Q->insertPos = startOfData; | 122 { Q->insertPos = (volatile void **)startOfData; |
| 123 } | 123 } |
| 124 else | 124 else |
| 125 { Q->insertPos++; | 125 { Q->insertPos++; |
| 126 } | 126 } |
| 127 Q->insertLock = UNLOCKED; | 127 Q->insertLock = UNLOCKED; |
