为什么执行器不再出现在 Concurrency TS 和 std::future 接口中?

Cur*_*ous 5 c++ concurrency future c++11

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

但是这里的官方文档介绍了并发 TS 中的所有功能http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0159r0.html#futures.unique_future并没有包含 .then() 的重载并且根本不提及执行器。它说

当对象的共享状态就绪时,将在未指定的执行线程上调用Continue INVOKE(DECAY_COPY(std::forward<F>(func)),并在调用该线程的线程中对调用进行评估。std::move(*this))DECAY_COPY()

为什么接口不提供对闭包执行方式的精确控制?那么如何控制哪个线程运行回调呢?为什么对提议的版本进行更改?

注意我不确定我链接到的并发 TS 论文是否是最新的,但 cppreference 也没有executor在任何地方提到 s

编辑如果有人在某些 C++ 标准论文中提到了不继续执行程序的原因,那就太好了!

Adr*_*thy 2

为什么对提议的版本进行更改?

TS 是接近标准化功能的试验气球,但可能尚未形成最终形式。它们为标准委员会提供了一个获得经验的机会,以了解什么在现实世界中有效,什么无效。

由于至少有一项针对执行器的新提案,工作组似乎对 TS 中的执行器并不满意,并且正在标准化之前对其进行完善。

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

现在,您似乎必须依赖某种语言或库扩展,或者自行推出。我还没有对提案进行足够的研究,无法说明如果提案成为标准的一部分,您将如何做,但看起来then_execute,它可以是自由函数或执行器对象的成员,将是关键。