赞
踩
协程是C++20最重要的特性,C++的异步编程模式有了协程将会变得简单。协程是能暂停执行以在之后恢复的函数。C++20协程是无栈的在堆上分配一个协程帧,把函数的参数拷贝到协程帧里,会在协程帧里创建promise对象。它们通过返回到调用方暂停执行,并且从栈分离存储恢复执行需要的数据。这样就可以编写异步执行的顺序代码(例如不使用显式的回调来处理非阻塞 I/O),还支持对惰性计算的无限序列上的算法及其他用途。
协程是一个有点特殊的函数,相比普通函数协程的特殊之处在于它可以暂停和恢复,如下图所示:
如果一个函数中出现了co_await、co_return和co_yield这三个关键字之一,那么这个函数就是一个协程。
- #include <coroutine>
- #include <iostream>
- #include <memory>
-
- template<typename T>
- struct MyFuture {
- std::shared_ptr<T> value;
- MyFuture(std::shared_ptr<T> p) : value(p) {} // (3)
- ~MyFuture() { }
- T get() { // (10)
- return *value;
- }
- struct promise_type {
- std::shared_ptr<T> ptr;
- promise_type(): ptr(std::make_shared<T>()) { // (4)
- }
- ~promise_type() { }
- MyFuture<T> get_return_object() { // (7)
- return ptr;
- }
- void return_value(T v) { // (8)
- *ptr = v;
- }
- std::suspend_never initial_suspend() { // (5)
- return {};
- }
- std::suspend_never final_suspend() noexcept { // (6)
- return {};
- }
- void unhandled_exception() {
- std::exit(1);
- }
- };
- };
-
- MyFuture<int> createFuture() {
- co_return 2022; // (9)
- }
-
- int main() {
- auto fut = create
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。