lock_guard
更加的高效,是一种RAII的体现。
只能在析构函数中解锁。
unique_lock
更加的灵活,但是比 lock_guard 更消耗资源,可以自己随时 unlock 解锁
使用 condition_variable 的情况下必须使用 unique_lock
condition_variable data_cond;
mutex mut;
{
std::unique_lock<mutex> lk(mut);
data.wait(lk, func );
// ...
// ...
}
wait 会去检查这些条件,当条件 func 返回 true 时返回。如果条件不满足,func返回false,wait() 函数将解锁互斥量,并且将这个线程置于阻塞或等待状态。
以为在执行的过程中需要解锁 mutex, lock_guard 只能在析构函数中解锁,而unique_lock 可以unlock() 函数解锁。