讀寫鎖是另一種實現線程間同步的方式。與互斥量類似,但讀寫鎖將操作分為讀、寫兩種方式,可以多個線程同時占用讀模式的讀寫鎖,這樣使得讀寫鎖具有更高的并行性。
讀寫鎖的特性為:寫獨占,讀共享;寫鎖優先級高。對于讀寫鎖,掌握了這12個字就足矣了。
Linux環境下,讀寫鎖具有以下三種狀態:
讀模式下加鎖狀態 (讀鎖)
寫模式下加鎖狀態 (寫鎖)
不加鎖狀態
雖然讀寫鎖有讀鎖、寫鎖、不加鎖三種狀態,但其實它只有一把鎖,而非三把。
前文提到,讀寫鎖的特性為:寫獨占,讀共享;寫鎖優先級高。具體來講:
讀寫鎖是“寫模式加鎖”時, 解鎖前,所有嘗試對該鎖進行加鎖(不管是讀鎖還是寫鎖)的線程都會被阻塞;--》 寫獨占
讀寫鎖是“讀模式加鎖”時, 如果線程以讀模式對其加鎖會成功;如果線程以寫模式加鎖會阻塞。--》 讀共享
讀寫鎖是“讀模式加鎖”時, 既有試圖以寫模式加鎖的線程,也有試圖以讀模式加鎖的線程。那么讀寫鎖會阻塞隨后的讀模式鎖請求,優先滿足寫模式鎖。--》 寫鎖優先級高
讀寫鎖也叫共享-獨占鎖。當讀寫鎖以讀模式鎖住時,它是以共享模式鎖住的;當它以寫模式鎖住時,它是以獨占模式鎖住的。寫獨占、讀共享。
讀寫鎖非常適合于對數據結構讀的次數遠大于寫的情況。因為讀鎖是共享的,這樣可以提高并行性。
主要應用函數:
pthread_rwlock_init函數
pthread_rwlock_destroy函數
pthread_rwlock_rdlock函數
pthread_rwlock_wrlock函數
pthread_rwlock_tryrdlock函數
pthread_rwlock_trywrlock函數
pthread_rwlock_unlock函數
以上7 個函數的返回值都是:成功返回0,失敗直接返回錯誤號。
pthread_rwlock_t類型:用于定義一個讀寫鎖變量,比如:pthread_rwlock_t rwlock;
##pthread_rwlock_init函數
函數原型:
int pthread_rwlock_init(pthread_rwlock_t restrict rwlock, const pthread_rwlockattr_t restrict attr);
函數作用:初始化一把讀寫鎖
參數說明:
rwlock:傳出參數,調用時應傳&rwlock給該函數;
attr:表示讀寫鎖屬性,通常傳NULL,表示使用默認屬性;
##pthread_rwlock_destroy函數
函數原型:
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
函數作用:銷毀一把讀寫鎖
##pthread_rwlock_rdlock函數
函數原型:
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
函數作用:以讀方式請求讀寫鎖。(常簡稱為:請求讀鎖)
##pthread_rwlock_wrlock函數
函數原型:
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
函數作用:以寫方式請求讀寫鎖。(常簡稱為:請求寫鎖)
##pthread_rwlock_unlock函數
函數原型:
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
函數作用:解鎖。
##pthread_rwlock_tryrdlock函數
函數原型:
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
函數作用:非阻塞以讀方式請求讀寫鎖(非阻塞請求讀鎖)
##pthread_rwlock_trywrlock函數
函數原型:
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
函數作用:非阻塞以寫方式請求讀寫鎖(非阻塞請求寫鎖)
責編AJX
-
Linux
+關注
關注
87文章
11320瀏覽量
209845 -
線程
+關注
關注
0文章
505瀏覽量
19705 -
操作環境
+關注
關注
0文章
9瀏覽量
7063
發布評論請先 登錄
相關推薦
評論