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