本文主要是介绍ACE_Semaphore信号量生产着消费者队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这个信号量机制在win32和linux上都支持,没有什么特别的感觉。直接上Demo如下,这个Demo也是经典的生产者消费者的实现:[cpp] view plaincopy
// thread_semaphore.cpp #include "ace/Task.h"
#include "ace/Semaphore.h" class Consumer:public ACE_Task <ACE_MT_SYNCH>
{
public: enum{ N_THREADS = 5 }; Consumer(ACE_Semaphore& psema, ACE_Semaphore& csema):m_psema(psema), m_csema(csema), m_exitCondition(0) {} int isClose() { return m_exitCondition; } int svc(void) { while (!isClose()) { consumeItem(); } return 0; } void consumeItem() { m_csema.acquire(); if (!isClose()) { ACE_Message_Block *mb; this->getq(mb); if (mb->msg_type() == ACE_Message_Block::MB_HANGUP) { shutdown(); mb->release(); return; } else { ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%t) Consumed %d \n"), *((int *)mb->rd_p
这篇关于ACE_Semaphore信号量生产着消费者队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!