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