[英]what does lock_guard always owns the lock mode of the referenced mutex mean?
我在讀這文章上互斥。 它說
lock_guard和unique_lock之間的最大區別是lock_guard始終擁有引用的互斥鎖的鎖定模式,而unique_lock沒有。 確實,unique_lock甚至可能沒有引用互斥量。
到目前為止,我僅了解的是,當我們需要構造一個鎖但不鎖定互斥鎖時,可以使用std::unique_lock
。 它是std::lock_guard
的改進版本,除此之外,我看不出太大區別。 如果有人能解釋擁有引用互斥鎖的鎖定模式是什么意思,我將不勝感激。
使用std::unique_lock
,可以在構造函數中指定option。
http://en.cppreference.com/w/cpp/thread/unique_lock/unique_lock
有三個選項std::defer_lock_t
, std::try_lock_t
和std::adopt_lock_t
。 std::defer_lock_t
不鎖定關聯的互斥鎖。
std::try_lock_t
嘗試通過調用m.try_lock()
鎖定相關的互斥鎖而不會阻塞。 如果當前線程已經擁有該互斥鎖,則該行為是不確定的,除非該互斥鎖是遞歸的。
std::adopt_lock_t
假定調用線程已經擁有m。
如果未指定任何選項(例如,僅使用互斥量參數調用構造函數)-互斥量只是通過mutex.lock()
函數鎖定。
使用std::lock_guard
,只能指定一個選項( std::adopt_lock_t
), std::adopt_lock_t
互斥鎖將通過鎖定功能lock
。
在所有這些情況下,如果mutex
被鎖定,則在lock_guard
/ unique_lock
析構函數中,互斥鎖將通過調用mutex.unlock()
函數來解鎖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.