private:
int counter = 1;
std::condition_variable cv1;
std::condition_variable cv2;
std::mutex g_mutex
多线程之互斥量(mutex)、锁(lock,unlock,lock_guard)
g_mutex.lock()
g_mutex.unlock()
条件变量的作用就是避免这种情况。condition.wait(mutex)阻塞当前线程并释放锁,直到被其他线程通过condition.notify唤醒。
wait()的第二个参数lambda表达式返回值是false,那么wait将解锁第一个参数(互斥量),并堵塞到本行,堵塞到其他某个线程调用notify_one()成员函数为止;如果第二个返回值是true,那么wait()直接返回。
unique_lock能够让等待中的线程解锁互斥元,并在wait返回true的时候重新锁定这个互斥元,而lock_guard没有这个功能。