一、unique_lock()
:
是一个类模板,可以取代lock_guard()
,相比起来前者更灵活,但效率较差,内存占用较多 ,一般工作中推荐使用lock_guard()。
二、unique_lock()
的第二个参数:
2.1 std::adopt_lock
:表示互斥量已经被lock,则在第二个参数添加此标志。(使用此参数则当前线程之前未使用lock()
)。
my_mutex1.lock();
std::lock_guard<std::mutex>myLockGuard(my_mutex1,std::adopt_lock);
2.2 std::try_to_lock()
:尝试给mute上lock(),如果没有锁定成功会立即返回,并不会产生阻塞。
//线程1:
std::unique_lock<std::mutex>myLockGuard(my_mutex1,std::try_to_lock);
if (myLockGuard.owns_lock())
{
//拿到锁
msgRecvQueue.push_back(i);
}
else
{
//未拿到锁
cout << "程序执行,未拿到锁..." << i <<