讀寫(xiě)鎖是另一種實(shí)現(xiàn)線(xiàn)程間同步的方式。與互斥量類(lèi)似,但讀寫(xiě)鎖將操作分為讀、寫(xiě)兩種方式,可以多個(gè)線(xiàn)程同時(shí)占用讀模式的讀寫(xiě)鎖,這樣使得讀寫(xiě)鎖具有更高的并行性。
讀寫(xiě)鎖的特性為:寫(xiě)?yīng)氄?,讀共享;寫(xiě)鎖優(yōu)先級(jí)高。對(duì)于讀寫(xiě)鎖,掌握了這12個(gè)字就足矣了。
Linux環(huán)境下,讀寫(xiě)鎖具有以下三種狀態(tài):
讀模式下加鎖狀態(tài) (讀鎖)
寫(xiě)模式下加鎖狀態(tài) (寫(xiě)鎖)
不加鎖狀態(tài)
雖然讀寫(xiě)鎖有讀鎖、寫(xiě)鎖、不加鎖三種狀態(tài),但其實(shí)它只有一把鎖,而非三把。
前文提到,讀寫(xiě)鎖的特性為:寫(xiě)?yīng)氄?,讀共享;寫(xiě)鎖優(yōu)先級(jí)高。具體來(lái)講:
讀寫(xiě)鎖是“寫(xiě)模式加鎖”時(shí), 解鎖前,所有嘗試對(duì)該鎖進(jìn)行加鎖(不管是讀鎖還是寫(xiě)鎖)的線(xiàn)程都會(huì)被阻塞;--》 寫(xiě)?yīng)氄?/p>
讀寫(xiě)鎖是“讀模式加鎖”時(shí), 如果線(xiàn)程以讀模式對(duì)其加鎖會(huì)成功;如果線(xiàn)程以寫(xiě)模式加鎖會(huì)阻塞。--》 讀共享
讀寫(xiě)鎖是“讀模式加鎖”時(shí), 既有試圖以寫(xiě)模式加鎖的線(xiàn)程,也有試圖以讀模式加鎖的線(xiàn)程。那么讀寫(xiě)鎖會(huì)阻塞隨后的讀模式鎖請(qǐng)求,優(yōu)先滿(mǎn)足寫(xiě)模式鎖。--》 寫(xiě)鎖優(yōu)先級(jí)高
讀寫(xiě)鎖也叫共享-獨(dú)占鎖。當(dāng)讀寫(xiě)鎖以讀模式鎖住時(shí),它是以共享模式鎖住的;當(dāng)它以寫(xiě)模式鎖住時(shí),它是以獨(dú)占模式鎖住的。寫(xiě)?yīng)氄肌⒆x共享。
讀寫(xiě)鎖非常適合于對(duì)數(shù)據(jù)結(jié)構(gòu)讀的次數(shù)遠(yuǎn)大于寫(xiě)的情況。因?yàn)樽x鎖是共享的,這樣可以提高并行性。
主要應(yīng)用函數(shù):
pthread_rwlock_init函數(shù)
pthread_rwlock_destroy函數(shù)
pthread_rwlock_rdlock函數(shù)
pthread_rwlock_wrlock函數(shù)
pthread_rwlock_tryrdlock函數(shù)
pthread_rwlock_trywrlock函數(shù)
pthread_rwlock_unlock函數(shù)
以上7 個(gè)函數(shù)的返回值都是:成功返回0,失敗直接返回錯(cuò)誤號(hào)。
pthread_rwlock_t類(lèi)型:用于定義一個(gè)讀寫(xiě)鎖變量,比如:pthread_rwlock_t rwlock;
##pthread_rwlock_init函數(shù)
函數(shù)原型:
int pthread_rwlock_init(pthread_rwlock_t restrict rwlock, const pthread_rwlockattr_t restrict attr);
函數(shù)作用:初始化一把讀寫(xiě)鎖
參數(shù)說(shuō)明:
rwlock:傳出參數(shù),調(diào)用時(shí)應(yīng)傳&rwlock給該函數(shù);
attr:表示讀寫(xiě)鎖屬性,通常傳NULL,表示使用默認(rèn)屬性;
##pthread_rwlock_destroy函數(shù)
函數(shù)原型:
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
函數(shù)作用:銷(xiāo)毀一把讀寫(xiě)鎖
##pthread_rwlock_rdlock函數(shù)
函數(shù)原型:
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
函數(shù)作用:以讀方式請(qǐng)求讀寫(xiě)鎖。(常簡(jiǎn)稱(chēng)為:請(qǐng)求讀鎖)
##pthread_rwlock_wrlock函數(shù)
函數(shù)原型:
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
函數(shù)作用:以寫(xiě)方式請(qǐng)求讀寫(xiě)鎖。(常簡(jiǎn)稱(chēng)為:請(qǐng)求寫(xiě)鎖)
##pthread_rwlock_unlock函數(shù)
函數(shù)原型:
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
函數(shù)作用:解鎖。
##pthread_rwlock_tryrdlock函數(shù)
函數(shù)原型:
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
函數(shù)作用:非阻塞以讀方式請(qǐng)求讀寫(xiě)鎖(非阻塞請(qǐng)求讀鎖)
##pthread_rwlock_trywrlock函數(shù)
函數(shù)原型:
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
函數(shù)作用:非阻塞以寫(xiě)方式請(qǐng)求讀寫(xiě)鎖(非阻塞請(qǐng)求寫(xiě)鎖)
責(zé)編AJX
-
Linux
+關(guān)注
關(guān)注
88文章
11822瀏覽量
219600 -
線(xiàn)程
+關(guān)注
關(guān)注
0文章
510瀏覽量
20875 -
操作環(huán)境
+關(guān)注
關(guān)注
0文章
9瀏覽量
7208
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式開(kāi)發(fā)中三種操作系統(tǒng)的分析與比較
嵌入式開(kāi)發(fā)中三種操作系統(tǒng)的分析與比較
嵌入式開(kāi)發(fā)中三種操作系統(tǒng)的分析與比較
嵌入式開(kāi)發(fā)中三種操作系統(tǒng)的分析與比較
嵌入式開(kāi)發(fā)中三種操作系統(tǒng)的分析與比較
嵌入式開(kāi)發(fā)中三種操作系統(tǒng)的分析與比較
嵌入式開(kāi)發(fā)中三種操作系統(tǒng)對(duì)比分析哪個(gè)好
三種常用的嵌入式操作系統(tǒng)是什么
Linux操作系統(tǒng)
Linux操作系統(tǒng)原理及應(yīng)用
三種嵌入式操作系統(tǒng)的分析與比較
三種通用嵌入式操作系統(tǒng)的分析與比較
Linux操作系統(tǒng)與Windows操作系統(tǒng)的五大區(qū)別
Linux操作系統(tǒng)修改內(nèi)核參數(shù)的三種方法詳細(xì)說(shuō)明
詳談Linux操作系統(tǒng)的三種狀態(tài)的讀寫(xiě)鎖
評(píng)論