再談多執行緒模型之生產者消費者(總結)(c++11實現)
阿新 • • 發佈:2020-10-21
0.關於
為縮短篇幅,本系列記錄如下:
再談多執行緒模型之生產者消費者(基礎概念)(c++11實現)
再談多執行緒模型之生產者消費者(單一生產者和單一消費者)(c++11實現)
再談多執行緒模型之生產者消費者(單一生產者和多消費者)(c++11實現)
再談多執行緒模型之生產者消費者(多生產者和單一消費者 )(c++11實現)
再談多執行緒模型之生產者消費者(多生產者和多消費者 )(c++11實現)
再談多執行緒模型之生產者消費者(總結)(c++11實現)【本文】
本文涉及到的程式碼演示環境: VS2017
歡迎留言指正
1. 關於結構體模型
回到一對多或者多對多的結構體模型中來看。這裡以**多對多為例。
template<typename T> struct repo_ { // 用作互斥訪問緩衝區 std::mutex _mtx_queue; // 緩衝區最大size unsigned int _count_max_queue_10 = 10; // 緩衝區 std::queue<T> _queue; // 緩衝區沒有滿,通知生產者繼續生產 std::condition_variable _cv_queue_not_full; // 緩衝區不為空,通知消費者繼續消費 std::condition_variable _cv_queue_not_empty; // 用於生產者之間的競爭 std::mutex _mtx_pro; // 計算當前已經生產了多少資料了 unsigned int _cnt_cur_pro = 0; // 用於消費者之間的競爭 std::mutex _mtx_con; // 計算當前已經消費多少資料了 unsigned int _cnt_cur_con = 0; repo_(const unsigned int count_max_queue = 10) :_count_max_queue_10(count_max_queue) , _cnt_cur_con(0) { ; } repo_(const repo_&instance) = delete; repo_& operator = (const repo_& instance) = delete; repo_(const repo_&&instance) = delete; repo_& operator = (const repo_&& instance) = delete; };
其實,你肯定也發現了,結構體中的_cnt_cur_pro和_cnt_cur_con用作控制執行緒的結束。 實際中結束執行緒的方式有多種多樣, 而且實際中執行緒很少會出現執行緒僅執行幾次就退出了。
2. 多緩衝區與單一緩衝區
你肯定也發現了,這幾篇筆記中,主要都是在單一緩衝區上做文章,那,多緩衝區呢?由於經常使用到的是筆記中記下的模型,多緩衝區模型還沒用到過,自己還沒掌握。 歡迎留言交流多緩衝區。