stdthread(7)并发unique_lock
生活随笔
收集整理的這篇文章主要介紹了
stdthread(7)并发unique_lock
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. std::unique_lock與std::lock_guard類似。通過對lock和unlock進行一次薄的封裝,都能實現自動加鎖與解鎖功能,但是std::unique_lock要比std::lock_guard更靈活,占用空間相對更大一點且相對更慢一點。
1.1 主要成員函數
unique_lock() noexcept;//不管理任何 Mutex 對象explicit unique_lock(mutex_type& m); 管理 Mutex 對象 m,并嘗試調用 m.lock() 對 Mutex 對象進行上鎖,如果此時另外某個 unique_lock 對象已經管理了該 Mutex 對象 m,則當前線程將會被阻塞。 (創建的 unique_lock 對象通常擁有 Mutex 對象的鎖)unique_lock(mutex_type& m, try_to_lock_t tag); 管理 Mutex 對象 m,并嘗試調用 m.try_lock() 對 Mutex 對象進行上鎖,但如果上鎖不成功,并不會阻塞當前線程。unique_lock(mutex_type& m, defer_lock_t tag) noexcept; 管理 Mutex 對象 m,但是在初始化的時候并不鎖住 Mutex 對象。m 應該是一個沒有當前線程鎖住的 Mutex 對象。 (創建的則不會擁有鎖)unique_lock(mutex_type& m, adopt_lock_t tag); 管理 Mutex 對象 m, m 應該是一個已經被當前線程鎖住的 Mutex 對象。(并且當前新創建的 unique_lock 對象擁有對鎖(Lock)的所有權)。 (創建的 unique_lock 對象通常擁有 Mutex 對象的鎖)//相對時間 template <class Rep, class Period> unique_lock(mutex_type& m, const chrono::duration<Rep,Period>& rel_time); 試圖通過調用 m.try_lock_for(rel_time) 來鎖住 Mutex 對象一段時間(rel_time)//絕對時間 template <class Clock, class Duration> unique_lock(mutex_type& m, const chrono::time_point<Clock,Duration>& abs_time); 試圖通過調用 m.try_lock_until(abs_time) 來在某個時間點(abs_time)之前鎖住 Mutex 對象。unique_lock(const unique_lock&) = delete;//move unique_lock(unique_lock&& x);eg .
std::mutex mut; void insert_data() { std::lock_guard<std::mutex> lk(mut); queue.push_back(data); } void process_data() { std::unqiue_lock<std::mutex> lk(mut); queue.pop(); } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的stdthread(7)并发unique_lock的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stdthread(6)并发lockGu
- 下一篇: STL源代码分析(ch2 内存分配)un