Linux 解析讀寫鎖

2021-10-07 12:09:26 字數 1576 閱讀 9620

應用函式:

與互斥量類似,但讀寫鎖允許更高的並行性。其特性為:寫獨佔,讀共享,寫鎖優先順序高

一把讀寫鎖具備三種狀態:

讀模式下加鎖狀態 (讀鎖)

寫模式下加鎖狀態 (寫鎖)

不加鎖狀態

讀寫鎖也叫共享-獨佔鎖。當讀寫鎖以讀模式鎖住時,它是以共享模式鎖住的;當它以寫模式鎖住時,它是以獨佔模式鎖住的。寫獨佔、讀共享。

讀寫鎖非常適合於對資料結構讀的次數遠大於寫的情況。

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...