![](/img/trans.png)
[英]what does unique_lock mean when a single thread acquire 2 unique_lock of the same mutex?
[英]Why unique_lock call unlock, when he does not owning mutex?
在此示例中,使用標志std :: defer_lock調用std :: unique_lock。 在cppreference上寫道:“defer_lock_t不獲取互斥鎖的所有權”和:“(析構函數)解鎖相關的互斥鎖,如果擁有”
現在,這個問題!
為什么在這個例子中,std :: unique_lock在析構函數中調用解鎖?
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::defer_lock
用於說“我稍后會以某種方式獲取鎖定”,這對std::lock(lock1, lock2)
的調用就是這樣。 因此,鎖在析構函數中調用unlock。 要測試它,你可以嘗試直接將互斥鎖給std::lock
: std::lock(from.m, to.m);
。 如果這樣做, unique_lock
將不會解鎖互斥鎖,因為它們不擁有互斥鎖。
還有std::adopt_lock
,它說“我已經擁有了鎖”。
這兩種方法大多是等價的,除了你不能將std::defer_lock
與std::lock_guard
,因為它沒有lock
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.