Archived
1
0
This repository has been archived on 2024-10-17. You can view files and clone it, but cannot push or open issues or pull requests.
winamp/Src/replicant/nu/lfmpscq.h

24 lines
525 B
C
Raw Permalink Normal View History

2024-09-24 12:54:57 +00:00
#pragma once
#include "queue_node.h"
/* lock free unbounded multiple producer, single consumer queue */
#ifdef __cplusplus
extern "C" {
#endif
typedef struct mpscq_struct_t
{
queue_node_t * volatile head;
queue_node_t *tail;
queue_node_t stub;
} mpscq_t;
#define MPSCQ_STATIC_INIT(self) {&self.stub, &self.stub, {0}}
void mpscq_init(mpscq_t* self);
int mpscq_push(mpscq_t *self, queue_node_t *n);
queue_node_t *mpscq_pop(mpscq_t *self); /* returns (queue_node_t *)1 if the queue is busy */
#ifdef __cplusplus
}
#endif