資源簡介
基本純使用標準C++庫,與平臺無關,主要使用多線程、互斥鎖、條件變量。演示多個生產者多個消費者之間的同步問題
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
unsigned?long?long?ResourceNumber?=?0;//緩沖區(qū)資源數(shù)目
unsigned?long?long?ResourcePool?=?10;//緩沖區(qū)最大容量
mutex?GlobalMutex;//全局的互斥鎖
condition_variable?GlobalCV;//全局的條件變量
bool?run?=?true;//控制各線程是否運行
chrono::milliseconds?*ProduceTime;//生產時間
chrono::milliseconds?*ConsumerTime;//消費時間
void?Consumer(int?id)
{
????while(run)
????{
????????this_thread::sleep_for(*ConsumerTime);//C++11線程睡眠
????????unique_lock?lock(GlobalMutex);//新建互斥鎖
????????while(ResourceNumber?<=?0)
????????????GlobalCV.wait(lock);//如果沒有資源,則進入等待狀態(tài)
????????ResourceNumber--;//令資源數(shù)目減1
????????cout?<“No.“?<????????lock.unlock();//解鎖
????????GlobalCV.notify_all();//喚醒其他所有線程
????}
}
void?Producer(int?id)
{
????while(run)
????{
????????this_thread::sleep_for(*ProduceTime);//C++11線程睡眠
????????unique_lock?lock(GlobalMutex);
????????while(ResourceNumber?>=?ResourcePool)
????????????GlobalCV.wait(lock);
????????ResourceNumber++;//令資源數(shù)目加1
????????cout?<“No.“?<
評論
共有 條評論