C++11并发学习之五:生产者与消费者
在C++11并发学习之四:线程同步(续)中实际上用条件变量实现了一个简单的单生产者-单消费者模型,也就是一个生产者和一个消费者。
本文将实现单生产者-多消费者模型、多生产者-单消费者模型和多生产者-多消费者模型。前两种实际上是简化版的多生产者-多消费者,因此只需要实现第三种。
#include #include #include #include #include int counter=0;int maxSize = 30;std::mutex mtx;std::queue dataQuene; // 被生产者和消费者共享std::condition_variable producer, consumer; // 条件变量是一种同步机制,要和mutex以及lock一起使用void func_consumer(){ while (true) { std::this_thread::sleep_for(std::chrono::milliseconds(1000));// 消费者比生产者慢 std::unique_lock lck(mtx); consumer.wait(lck, [] {return dataQuene.size() != 0; }); // 消费者阻塞等待, 直到队列中元素个数大于0 int num=dataQuene.front(); dataQuene.pop(); std::cout << "consumer " << std::this_thread::get_id() << ": "<< num < lck(mtx); producer.wait(lck, [] {return dataQuene.size() != maxSize; });// 生产者阻塞等待, 直到队列中元素个数小于maxSize ++counter; dataQuene.push(counter); std::cout << "producer " << std::this_thread::get_id() << ": "<< counter <运行结果
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~