【问题标题】:What is a noop coroutine?什么是 noop 协程?
【发布时间】:2020-11-17 06:13:30
【问题描述】:

C++20 标准在[coroutine.noop] 中定义了一个“noop 协程”。它是什么? 它与 body 为 { co_return; } 的函数有何不同?

更新

感谢您提供指向提案和标准的链接。从这些参考资料中总结,“noop 协程”是一种 resume()(或 operator())和 destroy() 方法没有副作用的协程。

但是destroy() 在用户编写的协程上总是(我认为!)有一个副作用,即破坏协程并进一步调用协程处理方法,包括 resume()destroy() 现在将是未定义的行为,这与无副作用的行为不同。

综上所述,没有办法写出让destroy()没有副作用的协程,只有库提供的noop协程才有这个属性,对吧?

(欢迎更新答案,以回应我的问题的更新。)

【问题讨论】:

  • 您能否提供参考标准中提到的位置?

标签: c++ language-lawyer c++20 c++-coroutine


【解决方案1】:

这是在这里提出的:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0913r1.html

基本上是这样的

拥有这样的协程句柄允许库编写器执行以下任一操作 基于运行时间的对称或非对称控制传输 考虑。

以下代码说明了这个想法(来自同一个提案):

struct Awaiter {
   ...
   auto await_suspend(coroutine_handle<> h) {
     ...
     return cond ? next_coro : noop_coroutine(); 
   }
 };

这与手写的 noop 协程不一定不同,但是已经为您预定义了一个非常方便。

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 2012-09-06
    • 2017-08-13
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 2011-01-05
    • 2019-07-24
    相关资源
    最近更新 更多