#include "ace/OS.h"
#include "ace/Task.h"
#include "ace/Message_Block.h"
//The Consumer Task.
class Consumer:
public ACE_Task<ACE_MT_SYNCH>
{
public:
int open(void*)
{
ACE_DEBUG((LM_DEBUG, "(%t) Consumer task opened \n"));
//Activate the Task
activate(THR_NEW_LWP,1);
return 0;
}
//The Service Processing routine
int svc(void)
{
//Get ready to receive message from Producer
ACE_Message_Block * mb =0;
do
{
mb=0;
//Get message from underlying queue
getq(mb);
ACE_DEBUG((LM_DEBUG,
"(%t)Got message: %d from remote task\n",*mb->rd_ptr()));
}while(*mb->rd_ptr()<10);
return 0;
}
int close(u_long)
{
ACE_DEBUG((LM_DEBUG,"Consumer closes down \n"));
return 0;
}
};
class Producer:
public ACE_Task<ACE_MT_SYNCH>
{
public:
Producer(Consumer * consumer):
consumer_(consumer), data_(0)
{
mb_=new ACE_Message_Block((char*)&data_,sizeof(data_));
}
int open(void*)
{
ACE_DEBUG((LM_DEBUG, "(%t) Producer task opened \n"));
//Activate the Task
activate(THR_NEW_LWP,1);
return 0;
}
//The Service Processing routine
int svc(void)
{
while(data_<11)
{
//Send message to consumer
ACE_DEBUG((LM_DEBUG,
"(%t)Sending message: %d to remote task\n",data_));
consumer_->putq(mb_);
//Go to sleep for a sec.
ACE_OS::sleep(1);
data_++;
}
return 0;
}
int close(u_long)
{
ACE_DEBUG((LM_DEBUG,"Producer closes down \n"));
return 0;
}
private:
char data_;
Consumer * consumer_;
ACE_Message_Block * mb_;
};
int main(int argc, char * argv[])
{
Consumer *consumer = new Consumer;
Producer * producer = new Producer(consumer);
producer->open(0);
consumer->open(0);
//Wait for all the tasks to exit.
ACE_Thread_Manager::instance()->wait();
return 0;
}
分享到:
相关推荐
3. **并发与并行处理**:C++网络编程往往涉及多线程和多进程,书中会介绍如何在C++中有效地管理并发,包括线程同步、互斥锁、条件变量等,并讨论了并发模型如生产者-消费者模型和读者-写者模型。 4. **对象复用与...
- **消息分发**:使用Pull和Push两种模式进行消息分发,Pull模式由消费者主动拉取,Push模式由服务器推送,适应不同场景需求。 - **消息顺序**:在某些场景下,RocketMQ能保证消息的顺序消费。 3. **RocketMQ的...
606_rocketMQ实战-生产者与spring结合 707_rocketMQ实战-消费者与spring结合 808_rocketMQ实战-数据库模型设计 909_rocketMQ实战-数据库DAO代码生成 1010_rocketMQ实战-远程RPC接口设计与实现(一) 1111_rocketMQ...
707_rocketMQ实战-消费者与spring结合25:47 808_rocketMQ实战-数据库模型设计28:18 909_rocketMQ实战-数据库DAO代码生成27:26 1010_rocketMQ实战-远程RPC接口设计与实现(一)29:29 1111_rocketMQ实战-远程RPC接口...
- **发布/订阅**:生产者将消息发送到一个主题(Topic),多个消费者可以订阅该主题,接收相应消息。 - **点对点**:每个消息只被一个消费者消费,一旦被消费,消息即被删除。 #### 2. 架构组件 - **NameServer**:...
在Linux内核版本5.8.1中,`kfifo`(Kernel FIFO)是一个重要的数据结构,被设计为无锁队列,适用于单生产者和单消费者的多线程环境。这个设计模式允许高效的并发访问,避免了在多线程操作中常见的竞态条件和死锁问题...
1. **消息中间件原理**:介绍消息中间件的基本概念,如生产者-消费者模型、消息队列、发布/订阅模式等。消息中间件如何通过异步通信提高系统性能,以及如何通过解耦组件降低系统复杂性。 2. **ACE框架**:ACE库提供...
为此,作者们引入了HLA(High-Level Architecture,高层体系结构)的发布/订阅思想,这是一种允许数据生产者(发布者)向数据消费者(订阅者)广播信息的机制,而无需两者之间直接的交互连接。 在设计过程中,他们...
这些趋势的加速发展与消费者对产品成分和来源的日益关注密切相关。 5. 包装与租赁模式的创新 环保新品在包装上强调固体形式、可生物降解和升级再造的优势。ACE of Air品牌提供了一个100%循环、零浪费的面部护理解决...
案例分析可能会涵盖如何创建Spring Boot项目,添加依赖,配置Eureka服务器,实现服务的注册与发现,使用Zuul进行API路由,以及集成Spring Security保护服务接口。此外,还可能涉及到Hystrix的配置,用于在服务调用...
- **可持续性**:消费者对环保和可持续性的关注度提升,促使企业在生产过程中采用更加环保的材料和技术。 - **市场扩张**:随着中产阶级规模的扩大和消费升级的趋势,东南亚市场对于豆袋椅的需求将持续增长。 #### ...
新一代的技术趋势,如技术熟练的消费者、持续运行的全球经济、Web 2.0协作模式以及移动和分布式劳动力,对数据中心提出了更高的要求。据估计,不进行基础设施的革新,半数现有数据中心将无法适应这些新需求。思科...
食品工业的需求增长可能与消费者对健康、无乳糖食品需求的增加有关,而动物饲料市场的需求则取决于畜牧业的发展和对高质量饲料的追求。 【行业发展环境分析】 行业发展环境分析涵盖了宏观经济状况、政策法规、技术...
在这个阶段,产品得到了消费者的广泛认可,销售额快速增长。 #### 进入国际市场战略模式选择 - **错误的选择原则**(选项D): 战略性原则并不是一个错误的选择,但在上下文中提到的“错误的进入国际市场战略模式...