12345678910111213141516171819202122232425262728293031323334 |
- #pragma once
- #include "queue_node.h"
- /* Algorithm taken from
- Lock-Free Techniques for Concurrent Access to Shared Objects
- Dominique Fober, Yann Orlarey, Stephane Letz
- http://www.grame.fr/Ressources/pub/LockFree.pdf
- http://nedko.arnaudov.name/soft/L17_Fober.pdf
- http://www.grame.fr/Ressources/pub/TR-050523.pdf
- This implementation (c) 2010 Nullsoft, Inc.
- */
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- struct FIFO_POINTER
- {
- queue_node_t *fifo_node_t;
- size_t count;
- };
- struct fifo_t
- {
- FIFO_POINTER head; // _head pointer and total count of pop operations (ocount)
- FIFO_POINTER tail; // _tail pointer and total count of push operations (icount)
- queue_node_t dummy;
- size_t count;
- };
- void fifo_init(fifo_t *fifo);
- void fifo_push(fifo_t *fifo, queue_node_t *cl);
- queue_node_t *fifo_pop(fifo_t *fifo);
- #ifdef __cplusplus
- }
- #endif
|