ACE_Task的生产者和消费者
2014-12-17 15:57
176 查看
#include "ace/Task.h" #include "ace/Message_Block.h" #include "ace/OS.h" const int N = 10; //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, 3); return 0; } //The Service Processing routine int svc(void) { ACE_Message_Block* mb = 0; for (;;) { mb = 0; getq(mb);//Get message from underlying queue if (*mb->rd_ptr() < N) { ACE_DEBUG( (LM_DEBUG, "(%t)Got message: %d from remote task\n", *mb->rd_ptr())); } else if (*mb->rd_ptr() == N) { ACE_DEBUG( (LM_DEBUG, "(%t)Got message: %d from remote task\n", *mb->rd_ptr())); ++*mb->rd_ptr(); // *mb->rd_ptr() == N+1 ungetq(mb); break;// 供后续线程查看 } else { // *mb->rd_ptr() > N ungetq(mb); break;// 供后续线程查看 } } return 0; } int close(u_long) { ACE_DEBUG((LM_DEBUG, "(%t)Consumer closes down \n")); return 0; } }; class Producer : public ACE_Task_Base { public: Producer(Consumer * consumer) : data_(0), consumer_(consumer) { 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_ <= N) { //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, "(%t)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; }
相关文章推荐
- ACE_Task介绍(生产者/消费者)v3.0
- ACE_Task介绍(生产者/消费者)
- ACE_Message_Queue和spawn实现(生产者/消费者)(V2.00)
- 用ACE实现生产者-消费者模式
- 基于ACE_Message_Queue的生产者消费者模式
- ACE_Message_Queue和spawn实现(生产者/消费者)(V2.00)
- 基于ACE_Message_Queue的生产者消费者模式
- 用ACE实现的生产者和消费者模式
- 用ACE实现生产者与消费者模式
- java例程练习(多线程综合练习[生产者-消费者问题])
- 生产者-消费者问题
- 简单生产者消费者模型(java实现)
- 设计模式之生产者消费者模式
- 多线程,生产者和消费者
- 线程同步经典案例-生产者与消费者模型-Java
- java_多线程_生产者与消费者(并发协作)
- 生产者消费者模型
- 秒杀多线程第十篇 生产者消费者问题
- 架构设计:生产者/消费者模式[2]:队列缓冲区
- 关于java用阻塞队列解决生产者消费者问题总结