|
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.
1.8.10