讲解下c plus plus 20标准中协程的使用
时间: 2023-02-19 15:47:17 浏览: 65
C++20标准引入了协程,它是一种可以在代码中创建并切换到另一个执行上下文的方法。使用协程可以实现非阻塞、异步编程,并且具有比线程更低的开销。
C++20中的协程是通过`co_await`关键字和`std::coroutine_handle`类型实现的。协程的代码体通过使用`co_await`关键字来挂起执行,从而允许切换到其他协程。
下面是一个简单的例子,展示了如何使用协程实现异步等待:
```
#include <iostream>
#include <chrono>
#include <experimental/coroutine>
using namespace std;
using namespace std::chrono;
using namespace std::experimental;
struct awaitable {
bool await_ready() { return false; }
void await_suspend(coroutine_handle<> coro) {
cout << "Suspending coroutine..." << endl;
this_thread::sleep_for(seconds(1));
cout << "Resuming coroutine..." << endl;
coro.resume();
}
void await_resume() {}
};
struct task {
struct promise_type {
task get_return_object() { return {}; }
auto initial_suspend() { return suspend_always{}; }
auto final_suspend() { return suspend_always{}; }
void return_void() {}
};
};
task func() {
cout << "In coroutine..." << endl;
co_await awaitable{};
cout << "Back in coroutine..." << endl;
}
int main() {
cout << "In main..." << endl;
func();
cout << "Back in main..." << endl;
return 0;
}
```
运行结果:
```
In main...
In coroutine...
Suspending coroutine...
Back in main...
Resuming coroutine...
Back in coroutine...
```
从上面的例子可以看出,协程可以在不阻塞主函数的情况下实现异步等待