因为推文感觉问题描述不清楚,干脆回一篇问问题
看完这三个policy之后对于他的设计感到有点疑惑,因此跑回去看draft
这是今年二月的版本
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0024r1.html
前一篇已经把这个草稿的精髓描述过了
我在这边只节录草稿中对于每个policy效果的描述
##sequential_execution_policy
The invocations of element access functions in parallel algorithms invoked
with an execution policy object of type sequential_execution_policy are
indeterminately sequenced (in) the calling thread.
基本上似乎是个fallback用的policy,让你在不改变呼叫形式的情况下也可以避免平行化
只是有个疑问,为什么要设计成“不保证执行顺序 (indeterminately sequenced)”呢?
有趣的是在2015的初稿中,原本是保证依序执行的,不知什么原因被改掉了
##parallel_execution_policy
The invocations of element access functions in parallel algorithms invoked
with an execution policy object of type parallel_execution_policy are
permitted to execute in an unordered fashion in either the invoking thread or
in a thread implicitly created by the library to support parallel algorithm
execution.
还蛮好想像的行为,没什么问题
##parallel_vector_execution_policy
The invocations of element access functions in parallel algorithms invoked
with an execution policy of type parallel_vector_execution_policy are
permitted to execute in an unordered fashion in unspecified threads, and
unsequenced with respect to one another within each thread.
问题来了,这个policy的优点何在?
乍看之下与parallel_execution_policy相较没有额外的好处,还会引入很多问题
例如前篇也提过的,许多synchronization都可能会变成deadlock
什么样的情况下会不用上一个policy而采用这个?