c++ 简单的生产者消费者模式

        生产者消费者模型并不属于面向对象的23种设计模式之一,实际上是结构化编程思想中的一种经典模式,使用非常广泛。而在面向对象编程过程中也不会只是面向对象,通常是与结构化编程相辅相成的。好了闲话不多说,下面的例子非常简单的使用了std::thread来实现一个生产者消费者模型。

#include 
#include 
#include 
#include 
#include 


class worker{
public:
    worker()=delete;//禁用默认构造
    worker& operator=(const worker&)=delete;//禁用赋值
    worker& operator=(worker&&)=delete;//禁用右值赋值
    explicit worker(bool _v):m_stop_generate(_v),m_stop_consume(_v){
        std::cout<<"worker constructor called, thread id: "< lock(mu);
        m_stop_generate = true;
        m_stop_consume = true;
        std::cout<<"stop called."< lock(mu);
                msgQueue.push(v);
            }

            std::cout<<"生产者存值, value is: "< lock(mu);
                ok = msgQueue.empty();
                if(!ok){
                    v = msgQueue.front();
                    msgQueue.pop();
                }
            }
            if(!ok)
                std::cout<<"消费者取值 ,value is: "< msgQueue;//线程共享资源
    static std::mutex mu;//线程共享资源
    bool m_stop_generate;
    bool m_stop_consume;
};

std::queue worker::msgQueue;
std::mutex worker::mu;



void dowork_nonconst(worker &a){
    std::cout<<"nonconst adress is: "<<&a<<", value is: "<

你可能感兴趣的:(c++,经验分享)