lock_guard
lock_guard
只能用在简单的临界区代码段的互斥操作中,不能用在函数参数传递或者返回值。因为lock_guard
内部delete
掉了所有的拷贝构造和赋值构造。
unique_lock
unique_lock
可以使用在函数传参的过程中,其他能用guard_lock
的地方unique_lock
也都能用。
condition_variable
void wait (unique_lock<mutex>& lck);
该方法使当前线程进入等待状态,并释放掉已获取到的unique_lock
。
void notify_one() noexcept;
该方法通知等待在同一个条件变量上的一个线程,使其退出等待状态,并进入阻塞状态,如果抢到了锁,该线程将继续运行。
void notify_all() noexcept;
该方法通知等待在同一个条件变量上的所有线程,使他们推出等待状态,并进入阻塞状态,谁抢到锁谁继续运行。