0

0

c++ 协程实现方法 c++如何使用boost.coroutine2

畫卷琴夢

畫卷琴夢

发布时间:2026-03-17 20:17:33

|

326人浏览过

|

来源于php中文网

原创

boost.coroutine2已弃用,应改用C++20协程及cppcoro或libunifex;仅老项目维护可锁定Boost 1.69.0并规避栈/链接问题。

c++ 协程实现方法 c++如何使用boost.coroutine2

boost.coroutine2 已被标记为 deprecated,别再新项目里用了

Boost 1.70 开始,boost.coroutine2 就被官方标为 deprecated;1.75 起彻底移出主分支,只保留在 boost-experimental 仓库里。它不支持 C++20 协程语法,也没人维护了。你现在看到的文档、博客示例,大概率跑不通或编译失败。

如果你只是想写个状态机、分段执行逻辑,或者临时替换回调嵌套,boost.coroutine2 看似简单,实则埋雷:

  • 依赖 Boost.Context,而后者在 macOS ARM64 / Windows Clang 下链接失败很常见
  • 协程栈大小默认 64KB,超了就静默崩溃,没提示
  • pull_coroutine<T>push_coroutine<T> 的调用顺序稍错一点,std::terminate 直接招呼

替代方案:C++20 std::coroutine + libunifex 或 cppcoro

真要协程,直接上标准库底座。C++20 提供了 co_awaitco_yieldco_return 和三类核心组件:promise_typecoroutine_handlecoroutine_traits。但裸写太重,推荐轻量封装库:

  • cppcoro:头文件库,无依赖,task<T>async_mutexwhen_all 都有,适合中小项目
  • libunifex(Facebook 开源):更现代,支持 executor 模型,但需要 C++20 完整支持(GCC 12+/Clang 14+)
  • 别碰 boost::asio::awaitable 做通用协程——它绑死 asio 的 io_context,纯计算场景反而拖慢

比如用 cppcoro 写一个带取消的延迟任务:

立即学习C++免费学习笔记(深入)”;

Post AI
Post AI

博客文章AI生成器

下载
cppcoro::task<int> fetch_with_timeout() {
  auto op = co_await cppcoro::with_timeout(
      std::chrono::seconds(3),
      http_get_async("https://api.example.com/data")
  );
  if (op.has_value()) co_return op.value();
  co_return -1;
}

如果非得跑通 boost.coroutine2,这些坑必须绕开

仅限维护老代码、或教学演示。以下配置能避开 90% 编译/运行时问题:

  • Boost 版本锁定在 1.69.0(最后稳定版),别用 1.70+;从 官网归档页 下载
  • CMake 中显式链接 boost_contextboost_threadtarget_link_libraries(myapp PRIVATE boost_context boost_thread)
  • 所有 pull_coroutine<int> 对象必须在栈上创建,不能 new 或放进 std::shared_ptr——析构顺序错会导致栈未释放就跳转
  • 避免跨协程捕获局部变量引用;传参一律用值或 std::shared_ptr

典型崩溃错误:coroutine: illegal instruction (core dumped),基本是上下文切换时栈被回收或对齐异常,不是代码逻辑错。

协程不是银弹,先问自己要不要

很多号称“用协程简化异步”的场景,其实用 std::future + std::thread 更直白,调试也方便。协程真正省事的地方只有两个:

  • 需要在单线程里维持大量并发状态(比如万级连接的网络服务)
  • 业务逻辑天然分段,且每段耗时不固定(如游戏 AI 行为树、解析器递归下降)

否则,加一层协程调度器,反而让 stack trace 变成黑盒,gdb 跳不到你写的 co_await 行,只停在 __builtin_unwind_init 里。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1091

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

620

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

355

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

235

2025.08.29

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

450

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

806

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

102

2025.12.01

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

7

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.6万人学习

C 教程
C 教程

共75课时 | 5.6万人学习

C++教程
C++教程

共115课时 | 22.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号