线程安全的线程间队列

时间:2012-12-02 22:29:45

标签: c++ boost message-queue

我正在寻找一个使用boost进行线程间通信的线程安全队列,但我没有发现任何类似的东西,所以我提出了自己的解决方案。
1-我使用了ManualResetEvent Boost equivalent of ManualResetEvent?

2-队列代码

MessageQueue::MessageQueue()
{
}
void MessageQueue::Push(void * data)
{
    Locker.lock();
    Queue.push(data);
    Locker.unlock();
    Event.Set();
}
void * MessageQueue::Pop()
{
    void * data = NULL;
    Event.Wait();
    Locker.lock();
    data = Queue.front();
    Queue.pop();
    if(Queue.size() == 0)
    {
      Event.Reset();
    }
    Locker.unlock();
    return data;

 }
 void * MessageQueue::Peek()
 {
    void * data = NULL;
    Locker.lock();
    if(Queue.size() > 0)
    {
      data = Queue.front();
      Queue.pop();
      if(Queue.size() == 0)
         Event.Reset();
    }
    Locker.unlock();
    return data;
 }
 MessageQueue::~MessageQueue(void)
 {
 }

它确实有用!但是它是实现线程间通信队列的正确方法吗? ,有更好的选择吗?

0 个答案:

没有答案