ACE_Semaphore信号量生产着消费者队列

这是一个使用ACE_Semaphore实现的生产者消费者问题的经典Demo,适用于Win32和Linux平台。代码中包含两个类,Consumer和Producer,分别用于消费和生产数据。Consumer类使用信号量m_csema获取资源,消费消息并释放信号量m_psema;Producer类则负责生产数据,同样通过信号量控制生产与消费的同步。主函数中创建并激活了Consumer和Producer对象,实现了数据的生产和消费过程。
摘要由CSDN通过智能技术生成
这个信号量机制在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值