c++11生産者消費者モデルの実現
1843 ワード
1.生産者と消費者モデル
一つの場所、二つの役、三つの関係.(場所:スレッドが安全なキュー)
2.メリット
デカップリング、サポートビジームラ、サポート同時
3.実現
反発ロック、条件変数の使用
#include
#include
#include
#include
#include
class Producer_Consumer
{
private:
deque _q; //
mutex _mtx; // .
condition_variable _cv; // .
int _count; //
private:
void Product{
while (true){
unique_lock lck(_mtx);
_count = ++_count % 1000;
printf("product %d
", _count);
_q.push_back(_count);
lck.unlock();
_cv.notify_all();
}
}
void Consume{
while (true){
unique_lock lck(_mtx);
while (_q.empty()){
_cv.wait(lck);
}
int nData = _q.front();
_q.pop_front();
printf("consume %d
", nData);
lck.unlock();
}
}
public:
CThreadDemo(){
_q.clear();
_count = 0;
}
void Test(){
vector threads;
threads.clear();
for (int i = 0; i < 5; i++){/* */
threads.push_back(thread(&Producer_Consumer::Product, this));
}
for (int i = 5; i < 10; i++){/* */
threads.push_back(thread(&Producer_Consumer::Consume, this));
}
for (auto& t : threads){/* */
t.join();
}
}
};
int main(int argc, _TCHAR* argv[)
{
Producer_Consumer p;
p.Test();
return 0;
}