與單生產者和單消費者模型不同的是,多生產者-單消費者模型中可以允許多個生產者同時向產品庫中放入產品。所以除了保護產品庫在多個讀寫執行緒下互斥之外,還需要維護生產者放入產品的計數器,**如下:
#include #include #include #include #include static const int kitemrepositorysize = 4; // item buffer size.
static const int kitemstoproduce = 10; // how many items we plan to produce.
struct itemrepository gitemrepository;
typedef struct itemrepository itemrepository;
void produceitem(itemrepository *ir, int item)
(ir->item_buffer)[ir->write_position] = item;
(ir->write_position)++;
if (ir->write_position == kitemrepositorysize)
ir->write_position = 0;
(ir->repo_not_empty).notify_all();
lock.unlock();
}int consumeitem(itemrepository *ir)
data = (ir->item_buffer)[ir->read_position];
(ir->read_position)++;
if (ir->read_position >= kitemrepositorysize)
ir->read_position = 0;
(ir->repo_not_full).notify_all();
lock.unlock();
return data;
}void producertask()
else ready_to_exit = true;
lock.unlock();
if (ready_to_exit == true) break;
}std::cout << "producer thread " << std::this_thread::get_id()
<< " is exiting..." << std::endl;
}void consumertask()
else break;
}std::cout << "consumer thread " << std::this_thread::get_id()
<< " is exiting..." << std::endl;
}void inititemrepository(itemrepository *ir)
int main()
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
單生產者,單消費者
單個生產者和單個消費者 include include include include include include define buffer size 5 產品庫存大小 define product cnt 50 產品生產總數 struct product cons buffer void i...
單生產者 單消費者
父親生產蘋果,女兒消費蘋果,當盤子中沒有蘋果的時候父親生產,女兒只能等待,當盤子中有蘋果的還是父親等待女兒消費 package com.cc.day16 public class demo01 定義乙個類,描述消費的產品 定義公共的變數 public string name public int c...