0

Boostを使用したスレッド間通信用のスレッドセーフキューを探していましたが、似たようなものが見つからなかったため、独自の解決策を考え出しました。
1- ManualResetEventと同等のManualResetEventBoostを使用しましたか?

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)
 {
 }

実際には機能しますが、スレッド間通信用のキューを実装する正しい方法ですか?、より良い代替手段はありますか?

4

0 に答える 0