jss::mpsc_fifo<>
provides a multi-producer single-consumer FIFO queue. Multiple threads
may call push()
concurrently on the same instance, but only one thread may call pop()
.
jss::mpsc_fifo<>
is an unbounded queue. When used with a lock-free memory allocator, the
queue is lock-free, unless pop()
is called on an empty queue, which will
block. try_pop()
and push()
are always lock-free when used with a lock-free memory allocator.
namespace jss { template<typename T> class mpsc_fifo { public: mpsc_fifo(mpsc_fifo const&) = delete; mpsc_fifo& operator=(mpsc_fifo const&) = delete; mpsc_fifo(); ~mpsc_fifo(); template<typename U> void push(U&& value); T pop(); bool try_pop(T& value); void poison(); }; }
#include <jss/mpsc_fifo.hpp>