From fc1ae3a26f407bbf2da1cdb367e18c72bec175a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sun, 7 Sep 2014 12:27:07 -0700 Subject: [PATCH] Added MPSC queue. --- include/bx/mpscqueue.h | 54 ++++++++++++++++++++++++++++++++++++++++++ include/bx/spscqueue.h | 2 +- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 include/bx/mpscqueue.h diff --git a/include/bx/mpscqueue.h b/include/bx/mpscqueue.h new file mode 100644 index 0000000..f750ee2 --- /dev/null +++ b/include/bx/mpscqueue.h @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2013 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#ifndef BX_MPSCQUEUE_H_HEADER_GUARD +#define BX_MPSCQUEUE_H_HEADER_GUARD + +#include "spscqueue.h" + +namespace bx +{ + template + class MpScUnboundedQueue + { + BX_CLASS(MpScUnboundedQueue + , NO_COPY + , NO_ASSIGNMENT + ); + + public: + MpScUnboundedQueue() + { + } + + ~MpScUnboundedQueue() + { + } + + void push(Ty* _ptr) // producer only + { + m_write.lock(); + m_queue.push(_ptr); + m_write.unlock(); + } + + Ty* peek() // consumer only + { + return m_queue.peek(); + } + + Ty* pop() // consumer only + { + return m_queue.pop(); + } + + private: + LwMutex m_write; + SpScUnboundedQueue m_queue; + }; + +} // namespace bx + +#endif // BX_MPSCQUEUE_H_HEADER_GUARD diff --git a/include/bx/spscqueue.h b/include/bx/spscqueue.h index fd02963..cdceacc 100644 --- a/include/bx/spscqueue.h +++ b/include/bx/spscqueue.h @@ -203,4 +203,4 @@ namespace bx } // namespace bx -#endif // BX_RINGBUFFER_H_HEADER_GUARD +#endif // BX_SPSCQUEUE_H_HEADER_GUARD