C++多線程-chap2多線程通信和同步5

 

這裏,只是記錄自己的學習筆記。

順便和大家分享多線程的基礎知識。然後從入門到實戰。有代碼。

知識點來源:

https://edu.51cto.com/course/26869.html


 

unique_lock  c++11

  • unique_lock  C++11 實現可移動的互斥體所有權包裝器
  • 支持臨時釋放鎖 unlock
  • 支持 adopt_lock (已經擁有鎖,不加鎖,出棧區會釋放)
  • 支持 defer_lock (延後擁有,不加鎖,出棧區不釋放)
  • 支持 try_to_lock 嘗試獲得互斥的所有權而不阻塞,獲取失敗退出棧區不會釋放,通過onws_lock() 函數判斷
  • 支持超時參數,超時不擁有鎖

 

 1 #include <iostream>
 2 #include <string>
 3 #include <mutex>
 4 #include <thread>
 5 
 6 using namespace std;
 7 
 8 int main() {
 9     {
10         static mutex mux;
11         {
12             unique_lock<mutex>  lock(mux);
13             lock.unlock();
14 
15             //臨時釋放鎖
16             lock.lock();            
17         }
18 
19         {
20             //已經擁有鎖,不鎖定,退出解鎖
21             mux.lock();
22             unique_lock<mutex> lock(mux, adopt_lock);
23         }
24 
25         {
26             //延後加鎖,不擁有(_Owns屬性爲false),退出不解鎖
27             unique_lock<mutex> lock(mux, defer_lock);
28 
29             //加鎖,退出棧區 解鎖
30             lock.lock();
31         }
32 
33         {
34 
35             mux.lock();
36             //嘗試加鎖,不阻塞,失敗不擁有鎖
37             unique_lock<mutex> lock(mux, try_to_lock);
38             if (lock.owns_lock()) {
39                 cout << "owns_lock" << endl;
40             }
41             else {
42                 cout << "not  owns_lock " << endl;
43             }
44             mux.unlock();
45         }
46     }
47 
48     getchar();
49     return 0;
50 }

 

 

shared_lock 共享鎖(讀鎖)

unique_lock 互斥鎖(寫鎖)

 1 #include <iostream>
 2 #include <string>
 3 #include <thread>
 4 #include <mutex>
 5 #include <shared_mutex>
 6 using namespace std;
 7 
 8 int main() {
 9     {
10         //共享鎖
11         static shared_timed_mutex tmux;
12         //讀取鎖 --> 共享鎖
13         {
14             //調用共享鎖
15             shared_lock<shared_timed_mutex>  lock(tmux);
16             //退出棧區,釋放共享鎖
17             cout << "read data " << endl;
18         }
19 
20         //寫入鎖  --> 互斥鎖
21         {
22             unique_lock<shared_timed_mutex> lock(tmux);
23             cout << "write data " << endl;
24         }
25     }
26 
27 
28     return 0;
29 }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章