C++20 引入了协程支持,使得编写异步代码变得更加简单。在 C++ 中,协程同步主要通过以下几种方式实现:
- co_await:co_await 关键字用于等待一个异步操作完成。它接受一个返回 std::future 或其他协程类型的表达式。当执行到 co_await 时,协程会暂停执行,直到等待的异步操作完成。在此期间,控制权将返回给调用者。
std::futureasyncOperation() { // 异步操作 } coroutine myCoroutine() { int result = co_await asyncOperation(); // 处理结果 }
- co_yield:co_yield 关键字用于从一个协程中返回一个值,同时保留协程的状态以便稍后恢复执行。这对于生成器协程非常有用。
coroutinemyCoroutine() { for (int i = 0; i < 5; ++i) { co_yield i; } }
- co_return:co_return 关键字用于从协程中返回一个值并结束协程的执行。
coroutinemyCoroutine() { int result = 0; for (int i = 0; i < 5; ++i) { result += i; } co_return result; }
- std::future 和 std::promise:std::future 用于获取异步操作的结果,而 std::promise 用于设置异步操作的结果。这两个类通常一起使用以实现协程之间的同步。
std::promiseprom; std::future fut = prom.get_future(); std::thread([&]() { int result = asyncOperation(); prom.set_value(result); }).detach(); int value = https://www.yisu.com/ask/fut.get(); // 获取异步操作的结果> 通过这些方式,C++ 协程可以方便地实现同步操作,使得异步编程更加简单和直观。