future,promise,packaged_task,async封装程度递增。
1. future,promise
2. packaged_task,async 隐藏promise提供更高层次的用户接口,用户可以不关心promise。
3. async 在packaged_task基础上隐藏thread创建过程。
注:
1)std::packaged_task::reset()
Resets the state abandoning the results of previous executions. New shared state is constructed.
调用该函数,可以清单上次的state,从而再次使用之前的packaged task
2)std::async policy参数、
· std::launch::async 函数在其他线程直接执行
· std::launch::deferred 当用future.get()获取结果时,才会去执行,函数将在当前线程上执行,这基本上是单线程延迟求值(single-threaded lazy evaluation)策略
· std::launch::async | std::launch::deferred 该种策略或为不指定时的默认情况,取决于系统和库的实现,后者通常针对系统中并发性的当前可用性进行优化
Parameters
f | - | Callable object to call | ||||||
args... | - | parameters to pass to f | ||||||
policy | - | bitmask value, where individual bits control the allowed methods of execution
|