2018-10-23 step

2018-10-23  本文已影响0人  11bansakana

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让所有等待它的线程去阻塞,直到被唤醒。

参考

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

上一篇 下一篇

猜你喜欢

热点阅读