c++11实现生产者消费者模型

 

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\n", _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\n", 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;  
}  

 

 

 

 

你可能感兴趣的:(GLUTEN)