为什么执行程序不再在并发TS和std :: future接口中?

时间:2017-05-25 20:20:09

标签: c++ c++11 concurrency future

论文N3784std::future::then的接口包含一个重载版本,它接受执行程序(在N3562中更详细地描述)作为参数。因此,如果您想要更多地控制执行回调的线程,您可以这样做。

但是,覆盖此处http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0159r0.html#futures.unique_future并发TS中所有功能的官方文档不包括.then()的重载,并且根本没有提及执行程序。它说

  

当对象的共享状态准备就绪时,在未指定的执行线程上调用继续INVOKE(DECAY_COPY(std::forward<F>(func))std::move(*this)),并在调用的线程中调用DECAY_COPY()

为什么界面不能精确控制闭包的执行方式?那么如何控制哪个线程运行回调呢?为什么要改变建议的版本?

注意我不确定我链接的并发TS文件是否是最新版本,但cppreference没有在任何地方提及executor

编辑如果某人在某些C ++标准文件中有参考或理由提及不继续执行者的原因,那就太棒了!

1 个答案:

答案 0 :(得分:2)

  

为什么要改变建议的版本?

TSes是试验气球,用于接近标准化的功能,但可能尚未达到最终形式。它们是标准委员会获得经验的机会,可以看到在现实世界中哪些有效,哪些无效。

由于至少有一个newer proposal for executors,工作组似乎对执行人员不满意,因为他们在TS中并且在标准化之前对它们进行了精炼。

  

如何控制哪个线程运行回调?

现在,您似乎必须依赖语言或图书馆扩展或自己推广。我没有研究过这个提议,如果提案成为标准的一部分,你会怎么做,但它看起来像then_execute,它可以是一个自由函数,也可以是执行者对象的成员,关键。