簡體   English   中英

lock_guard始終擁有引用的互斥鎖的鎖定模式是什么意思?

[英]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_tstd::try_lock_tstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM