傳統的c++98編寫起來**量挺大的,且受約束和限制,所以在空閒時間自寫了個基於c++11的生產者消費者模型,採用了boost部分庫,**量一下子變得很簡短且清晰。
#include "stdafx.h"
#include #include #include #include #include #include #include #include class task_handler
~task_handler()
int init(const std::function& f)
f_ = f;
return 0;
} void add_task(const boost::any& t, bool tail=true)
else
cond_.notify_all();
} void end_handle() }
protected:
void handle_task()
while (!que_.empty())
}}private:
std::dequeque_;
std::mutex mux_;
boost::condition_variable_any cond_;
std::functionf_;
std::shared_ptrconsumer_threadptr_;
};typedef struct
message;
int main()
else if (data.type() == typeid(std::string))
else if (data.type() == typeid(message))
};task_handler ther;
ther.init(f);
std::string str = "string";
message msg;
for (auto i = 0; i < 100; i++)
break;
case 1:
break;
case 2:
break;
} }getchar();
return 0;
}
上述只是單生產單消費者模型,而且當某一任務耗時較長時會阻礙後續的任務處理,其實還可以通過修改構成單生產者多消費者模型。
c 11生產者消費者
綜合運用 c 11 中的新的基礎設施 主要是多執行緒 鎖 條件變數 來闡述乙個經典問題 生產者消費者模型,並給出完整的解決方案。include include include include include include static const int kitemrepositorysize 1...
生產者 消費者,使用C 11的版本
multi threading以及lambda是c 11的重要公升級,下面的經典的生產者 消費者的 既使用了c 11的multi threading相關的庫,又使用了lambda。中有注釋,應該比較詳細。include include include include include using na...
c 11 生產者和消費者
include include include include using namespace std 定義兩個條件變數 佇列未滿 std condition variable queuenotfull 佇列不空 std condition variable queuenotempty 佇列鎖 st...