Poco::Thread 生产者消费者Demo
2013-02-18 18:34
274 查看
procon.cc
结果:
#include <cstdlib> #include <iostream> #include <vector> #include <Poco/Thread.h> #include <Poco/Runnable.h> #include <Poco/Mutex.h> using Poco::Runnable; using Poco::Thread; using Poco::Mutex; using Poco::FastMutex; class SharedResourc { public: void produce() { _fm.lock(); _vec.push_back(getRandNum()); std::cout << "+After Produce: "; printVec(); _fm.unlock(); } void consume() { _fm.lock(); if(!_vec.empty()) _vec.pop_back(); std::cout << "-After Consume: "; printVec(); _fm.unlock(); } private: FastMutex _fm; std::vector<int> _vec; void printVec() { for(int i=0; i<_vec.size(); ++i) std::cout << _vec[i] << " "; std::cout << std::endl; } int getRandNum() { return (int) (rand() % 80 + 10); } }; class ProducerThread: public Runnable { public: ProducerThread(SharedResourc& sr): _sr(sr) { } virtual void run() { for (int i=0; i<17; ++i) { _sr.produce(); Thread::sleep(400); } } private: SharedResourc& _sr; }; class ConsumerThread: public Runnable { public: ConsumerThread(SharedResourc& sr): _sr(sr) { } virtual void run() { for (int i=0; i<25; ++i) { _sr.consume(); Thread::sleep(700); } } private: SharedResourc& _sr; }; // === FUNCTION ====================================================================== // Name: main // Description: main function // ===================================================================================== int main ( int argc, char *argv[] ) { SharedResourc sr; ProducerThread pt(sr); ConsumerThread ct(sr); Thread th1, th2; th1.start(pt); th2.start(ct); th1.join(); th2.join(); return EXIT_SUCCESS; } // ---------- end of function main ----------
结果:
[root@slayer poco]# g++ procon.cc -lPocoFoundation [root@slayer poco]# ./a.out +After Produce: 33 -After Consume: +After Produce: 16 -After Consume: +After Produce: 67 +After Produce: 67 45 -After Consume: 67 +After Produce: 67 43 +After Produce: 67 43 25 -After Consume: 67 43 +After Produce: 67 43 36 -After Consume: 67 43 +After Produce: 67 43 22 +After Produce: 67 43 22 19 -After Consume: 67 43 22 +After Produce: 67 43 22 71 +After Produce: 67 43 22 71 52 -After Consume: 67 43 22 71 +After Produce: 67 43 22 71 37 +After Produce: 67 43 22 71 37 60 -After Consume: 67 43 22 71 37 +After Produce: 67 43 22 71 37 69 -After Consume: 67 43 22 71 37 +After Produce: 67 43 22 71 37 13 +After Produce: 67 43 22 71 37 13 16 -After Consume: 67 43 22 71 37 13 +After Produce: 67 43 22 71 37 13 70 -After Consume: 67 43 22 71 37 13 -After Consume: 67 43 22 71 37 -After Consume: 67 43 22 71 -After Consume: 67 43 22 -After Consume: 67 43 -After Consume: 67 -After Consume: -After Consume: -After Consume: -After Consume: -After Consume: -After Consume: -After Consume: -After Consume: -After Consume:
相关文章推荐
- Java中Thread的使用、死锁以及生产者消费者问题详解
- Thread--不同步的生产者与消费者
- kafka java 生产者消费者demo
- Disruptor多个消费者独立处理生产者消息的简单demo
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
- 多线程 生产者&消费者 哲学家进餐 & random & synchronized & Thread & Sleep
- 多线程学习Demo注解(3)——生产者和消费者
- java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)
- Disruptor多个消费者不重复处理生产者发送的消息的demo
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
- 在Windows环境中安装并使用kafka以及生产者消费者Demo
- C# Thread 多线程 Monitor 锁 Producer And Consumer 生产者和消费者 经典模型
- java生产者与消费者经典案例小demo
- Thread生产者消费者例子
- Thread(生产者和消费者)
- kafka-3python生产者和消费者实用demo
- Kafka 生产者和消费者 demo (java&scala)
- Java 写一个生产者和消费者的多线程Demo
- 在python中实现生产者和消费者的例子(四):使用thread模块和全局变量
- activeMQ的创建生产者和消费者的demo(队列模式)