std::coroutine_handle 定义于头文件<coroutine> template<classPromise=void>structcoroutine_handle; (1)(C++20 起) template<>structcoroutine_handle<void>; (2)(C++20 起) template<>structcoroutine_handle<std::noop_coroutine_promise>; (3)(C++20 起) ...
2.1.3 协程句柄std::coroutine_handle<> 如前所述,newco_await运算符确保函数的当前状态捆绑在堆上的某个位置,并创建一个可调用对象,该对象的调用将继续执行当前函数。可调用对象的类型为 std::coroutine_handle<>。 协程句柄的行为很像 C 指针。它可以很容易地复制,但它没有析构函数来释放与协程状态相关的内存...
我明白(至少通常是这样?)协程的返回类型负责存储std::coroutine_handle,因此负责协程状态/帧的生命周期。 但是,如果std::coroutine_handle通过std::unique_ptr处理协程状态/帧(在运行时,它的性能和原始指针一样好,不是吗?),会有什么不利之处呢? std::coroutine_handle的可复制性真的那么有价值吗?发布于 8 月...
std::coroutine_handle标准中是否有任何部分被定义为线程安全的? 例如,我可以看到std::coroutine_handle::done()使用原子变量来实现,这将允许在不首先锁定所有内容的情况下进行完成检查。 但是,如果标准中没有定义与线程安全相关的内容,那么我将不得不假设最坏的情况并始终锁定所有内容。 Nic*_*las5 没有指定任何...
static coroutine_handle from_promise( Promise& p ); (C++20 起) 从协程的承诺对象创建 coroutine_handle 。创建的 coroutine_handle 指代该协程,而 promise() 返回到 p 的引用。 若p 不是到承诺对象的引用则行为未定义。此函数仅对初等模板提供,即特化 std::coroutine_handle<> 与std::coroutine_handle<...
是的,这样做是完全可以的。std::coroutine_handle<>被设计为可以作为类型擦除句柄正常工作。显式指定promise类型的唯一用途是当您需要访问协程的promise对象时。 至于协同...
类模板 coroutine_handle 能用于指代暂停或执行的协程。 coroutine_handle 的每个特化均为字面类型 (LiteralType) 。1) 主模板,可从 Promise 类型的承诺对象创建。 2) 特化 std::coroutine_handle<void> 擦除承诺类型。它可从其他特化转换。 3) 特化 std::coroutine_handle<std::noop_coroutine_promise> 指代无...
比如L.append(x)和L.pop()就是原子操作,所以是thread安全。如果操作不是原子的,或者涉及修改多个列表...
structcoroutine_handle<void>; (2)(since C++20) template<> structcoroutine_handle<std::noop_coroutine_promise>; (3)(since C++20) usingnoop_coroutine_handle= std::coroutine_handle<std::noop_coroutine_promise>; (4)(since C++20) The class templatecoroutine_handlecan be used to refer to a sus...
特化std::coroutine_handle<std::noop_coroutine_promise> 的成员 constexpr bool done() const noexcept; (2) (C++20 起) 检查暂停的协程是否在其最终暂停点暂停。1) 若 *this 所指代的协程在其最终暂停点暂停则返回 true ,若该协程在其他暂停点暂停则返回 false 。若 *this 不指代暂停的协程则行为未定义...