notify_one()(随机唤醒一个等待的线程)和notify_all()(唤醒所有等待的线程),在c++里的实现原理和java不太一致,java必须在锁内(与wait线程一样的锁)调用notify。但c++是不需要上锁调用的,如果在锁里调用,可能会导致被立刻唤醒的线程继续阻塞(因为锁被notify线程持有),但c++标准上也说,一些实现(尤其是许多 pthread 的实现)为了归避这种情况,在通知调用中,直接将等待线程从条件变量队列转移到互斥队列,而不唤醒它,来避免此"hurry up and wait"场景
参考:https://en.cppreference.com/w/cpp/thread/condition_variable/notify_one