C++並發練習 筆記(一)STL<future>中的packaged_task

本文是关于C++并发编程的学习笔记,重点探讨了STL中的std::packaged_task。介绍了其作为异步调用模板函数的特点,如何封装不同类型的callable对象,并通过示例展示了其在生产者-消费者模型中的应用。同时,文章提到了资源竞争和线程同步问题,引入了Mutex和lock_guard进行改进,最后讨论了condition_variable确保线程安全。
摘要由CSDN通过智能技术生成

今天在偶然在找尋有關OpenCV的演算法實作方法時,看到了大牛們使用了packaged_task的這樣一個函數。

自己是沒見過的,當然就趕快操起google搜尋及手邊資料進行搜查。

並自己在網絡上找了一些視頻資源加以學習,並在此留下筆記,用來強化記憶及供人及自己日後參考。

推薦學習視頻連結:youtube:C++ Threading #9: packaged_task

Bo qian大神的一系列視頻講的真是不錯,每次都能從他的代碼中學到許多東西,因此真心推薦。


進入正文:

首先先附上來自cppreference.com的C++字典說明。來源連結

packaged_task被定義在頭文件<future>當中,而看到<future>這個頭文件,應該很多同學都跟我一樣心裡有了個底,這是個將會是個異步函數的調用

,就跟我們想的一樣,它確實就是如此。

這個模板函數能封裝任何callable的物件,包括function,lambda,bind expresion,function object,)而被包裝在其中的函數

將會被以異步的方式進行調用。

這是它的建構子。

template< class > class packaged_task; //not defined
(1) (since C++11)
template< class R, class ...Args > 
class packaged_task<R(Args...)>;
(2) (since C++11)

恩..確實有些難懂,不如先來看一下大至的使用方法

int Factorial(int N)					//被包裝函數的宣告及實現
{
  
	int res=1;
	for(int i=N;i>1;i--)
		res*=i;
	std::cout<<"Result is"<<res<<std::endl;
	return res;
}

std::deque<std::packaged_task<int()>> task_q;		//packeged_task的容器

int main()
{
  
	std::packaged_task<int(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值