您的位置:首页 > 其它

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:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: