C++20 协程(一)

协程是C++20最重要的特性,C++的异步编程模式有了协程将会变得简单。协程是能暂停执行以在之后恢复的函数。C++20协程是无栈的在堆上分配一个协程帧,把函数的参数拷贝到协程帧里,会在协程帧里创建promise对象。它们通过返回到调用方暂停执行,并且从栈分离存储恢复执行需要的数据。这样就可以编写异步执行的顺序代码(例如不使用显式的回调来处理非阻塞 I/O),还支持对惰性计算的无限序列上的算法及其他用途。

协程与函数

协程是一个有点特殊的函数,相比普通函数协程的特殊之处在于它可以暂停和恢复,如下图所示:
C++20 协程(一)_第1张图片

如果一个函数中出现了co_await、co_return和co_yield这三个关键字之一,那么这个函数就是一个协程。

举例子

关键词 co_return 完成执行并返回一个值:

#include 
#include 
#include 

template
struct MyFuture {
    std::shared_ptr value;                          
    MyFuture(std::shared_ptr p) : value(p) {}       // (3)
    ~MyFuture() { }
    T get() {                                          // (10)
        return *value;
    }
    struct promise_type {
        std::shared_ptr ptr; 
        promise_type(): ptr(std::make_shared()) {    // (4)
        }
        ~promise_type() { }
        MyFuture 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 createFuture() {                        
    co_return 2022;                                    // (9)
}

int main() {
    auto fut = cre

你可能感兴趣的:(C/C++,c++,开发语言)