生產者消費者問題之多生產者 單消費者模型

2021-10-21 21:01:02 字數 1477 閱讀 1718

與單生產者和單消費者模型不同的是,多生產者-單消費者模型中可以允許多個生產者同時向產品庫中放入產品。所以除了保護產品庫在多個讀寫執行緒下互斥之外,還需要維護生產者放入產品的計數器,**如下:

#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...