這裏,只是記錄自己的學習筆記。
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 }