16#define INVALID ((int32_t)0xffffffff)
17#define MAX ((int32_t)0x7fffffff)
29 tag =
new std::atomic<uint32_t>[
n];
30 for(
int i=0;
i<
n; ++
i)
56 if(((
uint32_t)next_tag) == elm_tag) {
57 if(!
tag[
i].compare_exchange_strong(elm_tag,
INVALID))
64 int sane_read =
next_r.compare_exchange_strong(next_tag, next_next_tag);
65 assert(sane_read &&
"No double read on a single tag");
69 while(!
avail.compare_exchange_strong(free_elms_next, free_elms_next-1));
86 if(!
next_w.compare_exchange_strong(write_tag, next_write_tag))
92 int sane_write =
tag[Q-
data].compare_exchange_strong(invalid_tag, write_tag);
97 while(!
avail.compare_exchange_strong(free_elms, free_elms+1))
106 for(
int i=0;
i<32; ++
i) {
109 ptr.memory =
new char[2048];
116 for(
int i=0;
i<32; ++
i)
117 delete []
pool[
i].memory;
#define INVALID
Definition MultiPseudoStack.cpp:16
~LockFreeQueue(void)
Definition MultiPseudoStack.cpp:34
std::atomic< int32_t > next_r
Definition MultiPseudoStack.h:34
std::atomic< int32_t > next_w
Definition MultiPseudoStack.h:35
qli_t * read(void)
Definition MultiPseudoStack.cpp:40
const int elms
Definition MultiPseudoStack.h:32
std::atomic< int32_t > avail
Definition MultiPseudoStack.h:36
void write(qli_t *Q)
Definition MultiPseudoStack.cpp:80
std::atomic< uint32_t > * tag
Definition MultiPseudoStack.h:33
qli_t *const data
Definition MultiPseudoStack.h:31
LockFreeQueue(qli_t *data_, int n)
Definition MultiPseudoStack.cpp:26
MultiQueue(void)
Definition MultiPseudoStack.cpp:102
LockFreeQueue m_free
Definition MultiPseudoStack.h:53
LockFreeQueue m_msgs
Definition MultiPseudoStack.h:54
void free(qli_t *q)
Definition MultiPseudoStack.h:61
qli_t * pool
Definition MultiPseudoStack.h:52
~MultiQueue(void)
Definition MultiPseudoStack.cpp:114
register unsigned i
Definition inflate.c:1575
int int32_t
Definition mid.cpp:97
unsigned int uint32_t
Definition mid.cpp:100
signed char int8_t
Definition mid.cpp:95
Definition zynaddsubfx-src.cpp:569
struct QueueListItem qli_t
Definition MultiPseudoStack.h:19
uint32_t size
Definition MultiPseudoStack.h:24
QueueListItem(void)
Definition MultiPseudoStack.cpp:21
char * memory
Definition MultiPseudoStack.h:23
int n
Definition crypt.c:458
#define MAX(a, b)
Definition unzpriv.h:2646