Added MPSC queue.

This commit is contained in:
Branimir Karadžić
2014-09-07 12:27:07 -07:00
parent 99c101f7e6
commit fc1ae3a26f
2 changed files with 55 additions and 1 deletions

54
include/bx/mpscqueue.h Normal file
View File

@@ -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 <typename Ty>
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<Ty> m_queue;
};
} // namespace bx
#endif // BX_MPSCQUEUE_H_HEADER_GUARD

View File

@@ -203,4 +203,4 @@ namespace bx
} // namespace bx
#endif // BX_RINGBUFFER_H_HEADER_GUARD
#endif // BX_SPSCQUEUE_H_HEADER_GUARD