基於c 11的短小精悍生產者消費者模型

2021-08-14 22:27:27 字數 1216 閱讀 7851

傳統的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...