条件变量 std::condition_variable
https://zhuanlan.zhihu.com/p/224054283
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起; 另一个线程使条件成立(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥量结合在一起。
notify_one为主动线程
wait为被动线程, 只有当wait里面的条件成立了,wait才开始解锁
主要作用是防止wait线程空执行,只有等notify_one这个线程更新了之后,wait才会动,才会去尝试解锁;如果一直没有收到notify_one的信息,wait会一直wait
互斥锁
https://zhuanlan.zhihu.com/p/667870655
std::mutex: 互斥锁
std::lock_guard: 构造函数执行了mutex::lock(),在作用域结束时,自动调用析构函数,执行mutex::unlock()
std::unique_lock:支持std::lock_guard的功能,但是区别在于它提供更多的成员函数,比如:lock(),unlock()使用更加灵活,并且可以和condiction_variable一起使用控制线程同步。但是效率差一点,内存占用多一点。