librfn
An ad-hoc utility library
|
Lockless message queue implementation using C11 atomic operations. More...
Data Structures | |
struct | messageq_t |
Macros | |
#define | MESSAGEQ_VAR_INIT(basep, base_len, msg_len) |
Functions | |
void | messageq_init (messageq_t *mq, void *basep, size_t base_len, size_t msg_len) |
void * | messageq_claim (messageq_t *mq) |
void | messageq_send (messageq_t *mq, void *msg) |
void * | messageq_receive (messageq_t *mq) |
void | messageq_release (messageq_t *mq, void *msg) |
Lockless message queue implementation using C11 atomic operations.
This is a lightweight memory based message queue capable of passing arbitrarily sized messages providing the size can be specified up front and the memory pre-allocated.
The message queue is thread safe for one-to-one and many-to-one messaging. It cannot be used to manage multiple receiver threads without additional external locking.
#define MESSAGEQ_VAR_INIT | ( | basep, | |
base_len, | |||
msg_len | |||
) |
Definition at line 54 of file messageq.h.
void* messageq_claim | ( | messageq_t * | mq | ) |
Definition at line 31 of file messageq.c.
void messageq_init | ( | messageq_t * | mq, |
void * | basep, | ||
size_t | base_len, | ||
size_t | msg_len | ||
) |
Definition at line 21 of file messageq.c.
void* messageq_receive | ( | messageq_t * | mq | ) |
Definition at line 57 of file messageq.c.
void messageq_release | ( | messageq_t * | mq, |
void * | msg | ||
) |
Definition at line 73 of file messageq.c.
void messageq_send | ( | messageq_t * | mq, |
void * | msg | ||
) |
Definition at line 50 of file messageq.c.