應用函式:
與互斥量類似,但讀寫鎖允許更高的並行性。其特性為:寫獨佔,讀共享,寫鎖優先順序高
一把讀寫鎖具備三種狀態:
讀模式下加鎖狀態 (讀鎖)
寫模式下加鎖狀態 (寫鎖)
不加鎖狀態
讀寫鎖也叫共享-獨佔鎖。當讀寫鎖以讀模式鎖住時,它是以共享模式鎖住的;當它以寫模式鎖住時,它是以獨佔模式鎖住的。寫獨佔、讀共享。
讀寫鎖非常適合於對資料結構讀的次數遠大於寫的情況。
int
pthread_rwlock_init
(pthread_rwlock_t *rwlock)
;
功能:初始化一把讀寫鎖
intpthread_rwlock_rdlock
(pthread_rwlock_t *rwlock)
;功能:以讀的方式加鎖
intpthread_rwlock_wrlock
(pthread_rwlock_t *rwlock)
;
功能:以寫的方式加鎖
intpthread_rwlock_tryrdlock
(pthread_rwlock_t *rwlock)
;
功能:非阻塞以讀的方式加鎖
intpthread_rwlock_trywrlock
(pthread_rwlock_t *rwlock)
;
功能:非阻塞以寫的方式加鎖
intpthread_rwlock_unlock
(pthread_rwlock_t *rwlock)
;
功能: 解鎖
intpthread_rwlock_destroy
(pthread_rwlock_t *rwlock)
;
功能:銷毀一把讀寫鎖
以上7 個函式的返回值都是:成功返回0, 失敗直接返回錯誤號。
pthread_rwlock_t rwlock; 變數rwlock只有兩種取值1、0。
在執行加鎖操作時需要額外表明讀寫意圖,讀者之間並不互斥,而寫者則要求與任何人互斥。讀寫鎖不需要特殊支援就可以直接用之前提到的幾個東西實現,比如可以直接用兩個 mutex 實現:
void 以讀者身份加鎖(rwlock)
解鎖(rwlock.保護當前讀者數量的鎖);}
void 以讀者身份解鎖(rwlock)
解鎖(rwlock.保護當前讀者數量的鎖);}
void 以寫者身份加鎖(rwlock)
void 以寫者身份解鎖(rwlock)
如果整個場景中只有乙個讀者、乙個寫者,那麼其實可以等價於直接使用互斥器。不過由於讀寫鎖需要額外記錄讀者數量,花銷要大一點。
如果本篇博文有幫助到您,請留個讚激勵一下博主吶~~
linux程序讀寫鎖
讀寫鎖比mutex有更高的適用性,可以多個執行緒同時占用讀模式的讀寫鎖,但是只能乙個執行緒占用寫模式的讀寫鎖。1.當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞 2.當讀寫鎖在讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的執行緒都可以得到訪問權,但是以寫模式對它進行...
Linux讀寫鎖使用
讀寫鎖很早就知道了,但是使用的不多,這次 中出現了,才認真思考怎麼用。摘錄一下 讀寫鎖的特點是 當讀寫鎖是寫加鎖時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞。當讀寫鎖是讀加鎖時,在這個鎖被解鎖之前,所有試圖以讀模式對他進行加鎖的執行緒都可以得到訪問權,但是如果執行緒以寫模式對此鎖加...
linux讀寫鎖應用
思路 linux多執行緒時,資料空間為公共,乙個執行緒去新增資料,乙個執行緒去修改資料,這個時候需要加入互斥鎖,倆個執行緒如果同時去處理這個資料空間,資料會出錯,除了執行緒鎖之外,學習了乙個讀寫鎖 詳細函式說明 核心函式 初始化讀寫鎖 pthread rwlock init 寫入讀寫鎖中的鎖 pth...