用一个生产者-消费者场景,把 cppcoro 的 7 个协程同步原语全部串起来

用一个生产者-消费者场景,把 cppcoro 的 7 个协程同步原语全部串起来 本专栏文章:拆开 cppcoro 给你看 · 第 2 篇 上一篇文章我把 cppcoro 的 task<T> 拆成了 5 个版本迭代。今天要搞定协程世界里另一个核心问题:多个协程之间怎么同步? 市面上的做法是一张 API 列表——“这是 async_mutex,这是 async_latch,啥时候用自己看着办”。我不这么讲。本文用同一个生产者-消费者场景,从简单到复杂逐步升级,每级只比上一级多一个特性,一共串起 7 个同步原语: 1 2 3 4 5 6 7 8 9 场景:生产者协程产生数据,消费者协程处理数据 Level 1: 单消费者,发信号通知 → single_consumer_event Level 2: 同上,但信号自动复位 → single_consumer_async_auto_reset_event Level 3: 多消费者,手动复位 → async_manual_reset_event Level 4: 多消费者,自动复位 → async_auto_reset_event Level 5: 共享数据的互斥访问 → async_mutex Level 6: 等待 N 个操作完成 → async_latch Bonus: when_all 的核心组件 → when_all_counter 每级都是可运行的代码。 ...

November 15, 2024 · 7 min · 1460 words