C++多线程:promise/future与packaged_task/future应用场景的区别

在我学习两者语法的时候总是搞不清两者的区别,知道怎么用却不清楚为什么这样用。
结论先写在前面。

  • promise/future:更关心的是结果,而不是得到结果的过程。
    比如你要获得一个文件的大小,你其实不关心获得文件大小的过程,你只关心最终的结果是否正确,什么时候可以拿到。
  • packaged_task/future:要结果,但是还关心其得到结果的过程。
    当然我是关心结果的,如果没有结果我直接使用thread单独就完成了。
    但是我也关心获得结果的过程。比如我要做一个建一栋房子,我要自己设计整个房子建造的流程。然后将整个建造流程发给真正的建造者,你按照这个流程建设就可以了。

关心与不关心,对应到代码中,就代表这个实现是你自己来写,还是可以交给别人写。
其中交给别人写可能是你的同事来实现细节,或者你调用已有的轮子。总之,你并不关心其具体实现细节。

如果有甲乙两个人,甲负责主线程编写,乙负责辅助线程的编写。

  • 如果甲需要乙帮忙获得文件大小,就只需要创建promise,获得其future,然后引用乙提供的头文件来构建thread,乙获得结果后将其塞进promise即可。注意这里thread的执行体是乙提供的,甲只需引用即可。

  • 如果甲需要乙来帮忙建房,甲必须自己提供建房流程,然后将其使用packaged_task包起来传递给乙。乙只需要按照指定图纸干活即可,完成后结果会自动返回给甲。

其实很多时候我们对编程概念的学习要站在两个不同的角度来看问题:我是一名库开发者还是库使用者?
如果站在一个库开发者的角度去看,我可能会帮客户实现一部分功能,但也可能需要留出空位让用户将自己的实现塞进来。了解这种情况有利于更加理解本文所讲的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值