【发布时间】:2016-07-23 14:26:13
【问题描述】:
在本例中,std::unique_lock 调用带有标志 std::defer_lock。在 cppreference 上写:“defer_lock_t 不获取互斥锁的所有权” 和:“(析构函数)解锁关联的互斥体,如果拥有”
现在,问题来了!
为什么在这个例子中,std::unique_lock 在析构函数中调用 unlock?
void transfer(Box &from, Box &to, int num)
{
// don't actually take the locks yet
std::unique_lock<std::mutex> lock1(from.m, std::defer_lock);
std::unique_lock<std::mutex> lock2(to.m, std::defer_lock);
// lock both unique_locks without deadlock
std::lock(lock1, lock2);
from.num_things -= num;
to.num_things += num;
// 'from.m' and 'to.m' mutexes unlocked in 'unique_lock' dtors
}
?????
【问题讨论】:
-
std::lock 它只是功能。他们返回无效
标签: c++ multithreading c++11 stl locking