c 11生產者消費者

2021-07-04 19:25:54 字數 1309 閱讀 1330

綜合運用 c++11 中的新的基礎設施(主要是多執行緒、鎖、條件變數)來闡述乙個經典問題——生產者消費者模型,並給出完整的解決方案。

#include #include #include #include #include #include static const int kitemrepositorysize  = 10; // item buffer size.

static const int kitemstoproduce = 1000; // 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() // 生產者任務

}void consumertask() // 消費者任務

}void inititemrepository(itemrepository *ir)

int main()

c 11 生產者和消費者

include include include include using namespace std 定義兩個條件變數 佇列未滿 std condition variable queuenotfull 佇列不空 std condition variable queuenotempty 佇列鎖 st...

5 12 生產者和消費者

一 生產者和消費者之間的關係 1 生產者將生產出來的資訊不斷存入乙個區域內,消費者將資訊從該區域內不斷讀取出來 生產者錄入資訊 消費者讀取資訊 例 電影票 public class movie public void setname string name public string getinfo...

6 1 生產者 消費者問題

在多執行緒程式中,執行緒之間通常存在分工。在一種常見模式中,一些執行緒是生產者,一些是消費者。需要強制執行幾個同步約束才能使此系統正常工作 在緩衝區中新增或刪除專案時,緩衝區處於不一致狀態。因此,執行緒必須具有對緩衝區的獨佔訪問許可權。如果消費者執行緒在緩衝區為空時到達,則會阻塞,直到生產者新增新專...