C++20 协同调度原语:利用 std::atomic::wait/notify 实现低功耗自旋锁在高并发下的快速响应协议 各位好,欢迎来到今天的“CPU 烧毁与睡觉的艺术”研讨会。 我是你们的主讲人,一个在并发地狱里摸爬滚打多年,头发比发际线后退速度还快的资深编程专家。今天我们要聊的话题,听起来可能有点像在讲“如何用微波炉煮意大利面”,但实际上,我们要探讨的是 C++20 中一个极其优雅、极其强大,但也极其容易被误用的特性——std::atomic::wait 和 std::atomic::notify。 我们要构建的东西,叫作低功耗自旋锁。这不仅仅是一个数据结构,这是一个在“性能”和“功耗”之间走钢丝的走钢丝大师。 第一部分:为什么我们要在这个时候折腾锁? 在 C++11 之前,或者更早的线程世界里,同步原语就像是“把所有线程都扔进一个大房间,然后用一把巨大的锁锁上门”。这种机制叫 std::mutex。 std::mutex 的哲学是:“既然你进不来,那你就睡吧,等我把门开了,我再叫醒你。” 听起来很公平,对吧?但问题在于,唤醒一个线程是需要成本的。操作系统得把那个昏昏欲睡的线程 …
继续阅读“C++20 协同调度原语:利用 std::atomic::wait/notify 实现低功耗自旋锁在高并发下的快速响应协议”