讀寫鎖
互斥鎖或自旋鎖要么是加鎖狀態(tài)、要么是不加鎖狀態(tài),而且一次只有一個線程可以對其加鎖。
讀寫鎖有3 種狀態(tài):讀模式下的加鎖狀態(tài)(以下簡稱讀加鎖狀態(tài))、寫模式下的加鎖狀態(tài)(以下簡稱寫加鎖狀態(tài))和不加鎖狀態(tài)(見),一次只有一個線程可以占有寫模式的讀寫鎖,但是可以有多個線程同時占有讀模式的讀寫鎖。因此可知,讀寫鎖比互斥鎖具有更高的并行性!
讀寫鎖有如下兩個規(guī)則:
- 當(dāng)讀寫鎖處于寫加鎖狀態(tài)時,在這個鎖被解鎖之前,所有試圖對這個鎖進行加鎖操作(不管是以讀模式加鎖還是以寫模式加鎖)的線程都會被阻塞。
- 當(dāng)讀寫鎖處于讀加鎖狀態(tài)時,所有試圖以讀模式對它進行加鎖的線程都可以加鎖成功;但是任何以寫模式對它進行加鎖的線程都會被阻塞,直到所有持有讀模式鎖的線程釋放它們的鎖為止。
讀寫鎖非常適合于對共享數(shù)據(jù)讀的次數(shù)遠大于寫的次數(shù)的情況。
初始化和銷毀讀寫鎖
#include < pthread.h >
int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
加鎖和解鎖
#include < pthread.h >
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
-
Linux
+關(guān)注
關(guān)注
87文章
11489瀏覽量
213165 -
線程
+關(guān)注
關(guān)注
0文章
507瀏覽量
20124
發(fā)布評論請先 登錄
Linux下線程間通訊---讀寫鎖和條件變量

Rust 語言中的 RwLock內(nèi)部實現(xiàn)原理
Linux讀寫鎖邏輯解析—嘗試獲取寫鎖

命名管道FIFO讀寫規(guī)則
Lock體系結(jié)構(gòu)和讀寫鎖機制解析
RT-Thread實現(xiàn)的互斥鎖屬性包括哪些
基于規(guī)則的RADIUS Server設(shè)計與實現(xiàn)
深入理解Linux RCU:RCU是讀寫鎖的替代者

分布式鎖的基本原理和案例實現(xiàn)

評論