美文网首页
2018-10-23 step

2018-10-23 step

作者: 11bansakana | 来源:发表于2018-10-23 10:53 被阅读0次

C++ 11 几个特性的整理

std::future - std::promise

解决的问题

返回值的异步获取:我们送一个任务到线程中去执行的时候,大部分时候是关心任务(就是函数啦)的返回值的。因为是起线程去执行,并不能向单线程同步执行那样简单,考虑到线程同步,自己实现至少需要一个返回值,一个状态标识,与相应的同步代码。
std::future提供了存储异步值的一个基础设施,包括了刚才说的值,状态,以及同步机制。
std::promise类内包含了future实例。
实践中教科书的用法就是,主线程声明promise,获取其future,然后把promise当成参数送到子线程执行,主线程在合适的位置调用future.wait(),wait_for()... get()来获取返回值。

参考

std::future
std::promise

condition_variable

解决的问题

并发任务处理临界区时,需要某种条件就绪了之后再处理,每个线程不断查询条件是否满足,CPU做了很多无用功,condition_variable让所有等待它的线程去阻塞,直到被唤醒。

  • 因为等待条件变量的线程是阻塞等待的,不参与cpu调度(回想一下进程状态图),这样有助于效率。
  • 条件满足后被唤醒是通过锁串行处理临界区的。

参考

std::condition_variable

std::function

解决的问题

std::function是一个通用的函数包装器,主要解决的问题是延迟执行,教科书式的使用就是callback函数
std::function<R(args..)>:R - 返回值, args - 参数。

参考

std::function

std::packaged_task

解决的问题

packaged_task跟function很像,都是可执行对象包装器的作用,不同在于,function的返回值必须是即时的,而packaged_task内藏一个future对象,可以获取异步返回结果。

参考

std::packaged_task

相关文章

  • 2018-10-23 step

    C++ 11 几个特性的整理 std::future - std::promise 解决的问题 返回值的异步获取:...

  • 霜降日随拍

    2018-10-23

  • GitLab全方位

    GitLab全方位 撰写日期:2018-10-23 更新日期:2018-10-23 文库地址:https://ww...

  • 收益率理解

    时间:2018-10-23

  • step by step

    忙毕业的事,一直没有时间和心情去研究彩铅画,难的这几天有空闲时间,就找了画纸,买了彩铅(超市里买的儿童24色彩铅笔...

  • Step by step

    我相信,每一个光鲜亮丽的外表下,都有一段执拗而又孤独的坚持。 如果人生只有一次翻身的机会,那么你一定要拼尽全力。 ...

  • Step by step

    今天是第一天来到简书,关于写作这件事情,始终是蛰伏在心底的。 这个星期四,我在数学课上,忽然想换个微博,想在微博上...

  • step by step

    今天开始,慢慢来。 一切,也都会慢慢的到来❤️

  • Step by step

    ----针对多多少少已经有点工作经验的盆友 补充那些被遗忘、忽略的知识 (重点是面试中曾出现过的问题 ajax、...

  • step by step

    或许有时候你会灵感突袭,猛地想写点东西但是又不知从何下笔。每每写文章时你想好了结构却思考不出该写一个怎样的故事。这...

网友评论

      本文标题:2018-10-23 step

      本文链接:https://www.haomeiwen.com/subject/aevozftx.html