C++ `std::atomic` 线程同步库的高级用法:`wait`, `notify_one`, `notify_all` (C++20)

哈喽,各位好! 今天咱们来聊聊 C++20 引入的 std::atomic 的新技能:wait、notify_one 和 notify_all。这哥仨儿的加入,让原子变量在线程同步方面更加游刃有余,简直是原子操作界的“完全体”。 一、 背景故事:原子变量的自我修养 在并发编程的世界里,共享数据是最容易引发混乱的根源。多个线程同时访问和修改同一块内存,就可能导致数据竞争,程序崩溃,或者出现一些神鬼莫测的bug。为了解决这个问题,C++ 提供了 std::atomic,它能保证对原子变量的操作是原子性的,也就是不可分割的。 但是,仅仅保证原子性还不够。有时候,我们需要线程之间能够协调工作,比如一个线程需要等待某个条件成立才能继续执行,或者一个线程需要通知其他线程某个事件已经发生。在 C++20 之前,我们通常需要借助互斥锁、条件变量等更重量级的工具才能实现这些功能。 而现在,有了 wait、notify_one 和 notify_all,原子变量也能胜任这些任务了。 二、 三剑客登场:wait, notify_one, notify_all 这三个函数,就像是原子变量的“睡眠”、“叫醒”和 …