讀寫鎖
互斥鎖或自旋鎖要么是加鎖狀態(tài)、要么是不加鎖狀態(tài),而且一次只有一個(gè)線程可以對其加鎖。
讀寫鎖有3 種狀態(tài):讀模式下的加鎖狀態(tài)(以下簡稱讀加鎖狀態(tài))、寫模式下的加鎖狀態(tài)(以下簡稱寫加鎖狀態(tài))和不加鎖狀態(tài)(見),一次只有一個(gè)線程可以占有寫模式的讀寫鎖,但是可以有多個(gè)線程同時(shí)占有讀模式的讀寫鎖。因此可知,讀寫鎖比互斥鎖具有更高的并行性!
讀寫鎖有如下兩個(gè)規(guī)則:
- 當(dāng)讀寫鎖處于寫加鎖狀態(tài)時(shí),在這個(gè)鎖被解鎖之前,所有試圖對這個(gè)鎖進(jìn)行加鎖操作(不管是以讀模式加鎖還是以寫模式加鎖)的線程都會(huì)被阻塞。
- 當(dāng)讀寫鎖處于讀加鎖狀態(tài)時(shí),所有試圖以讀模式對它進(jìn)行加鎖的線程都可以加鎖成功;但是任何以寫模式對它進(jìn)行加鎖的線程都會(huì)被阻塞,直到所有持有讀模式鎖的線程釋放它們的鎖為止。
讀寫鎖非常適合于對共享數(shù)據(jù)讀的次數(shù)遠(yuǎn)大于寫的次數(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);
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
讀寫鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進(jìn)行讀訪問,寫者則需要對共享資源進(jìn)行寫操作。件變量是線程可用的一種同步機(jī)制,條件變量給多個(gè)線程提供了一個(gè)回合的場所,條件變量和互斥量一起使用,允許線程以無競爭的方式等待特定的條件發(fā)生。
發(fā)表于 08-26 20:44
?1400次閱讀
Rust是一種系統(tǒng)級編程語言,它帶有嚴(yán)格的內(nèi)存管理、并發(fā)和安全性規(guī)則,因此很受廣大程序員的青睞。RwLock(讀寫鎖)是 Rust 中常用的線程同步機(jī)制之一,本文將詳細(xì)介紹 Rust 語言
發(fā)表于 09-20 11:23
?774次閱讀
問:ADA4350可寫不可讀是怎么回事,如何實(shí)現(xiàn)串口讀寫?
發(fā)表于 10-31 16:35
?721次閱讀
Rwsem的count成員還有一些bit用來標(biāo)記當(dāng)前讀寫鎖狀態(tài)(waiter bit和handoff bit),也需要根據(jù)情況進(jìn)行調(diào)整
發(fā)表于 12-04 11:12
?569次閱讀
Linux命名管道FIFO的讀寫規(guī)則《Linux程序設(shè)計(jì)(第3版)》對于Linux命名管道的讀寫規(guī)則詳解的不夠詳細(xì)和清楚,查了些資料,在此總結(jié)一下: 1.從FIFO中讀取數(shù)據(jù):約定:如
發(fā)表于 09-24 10:49
中,如何實(shí)現(xiàn)ABC的順序打印問題,基本思路就是基于線程的等待通知機(jī)制,但是實(shí)現(xiàn)方式很多,上述只是其中一種方式。二、讀寫鎖機(jī)制1、基礎(chǔ)API簡介重入鎖
發(fā)表于 01-05 17:53
* lock);函數(shù)返回 lock無效返回EINVAL,否則返回0或EPERM。互斥鎖屬性RT-Thread實(shí)現(xiàn)的互斥鎖屬性包括互斥鎖類型和互斥鎖
發(fā)表于 08-12 15:06
本文在分析RADIUS 協(xié)議原理基礎(chǔ)上,給出了一種基于規(guī)則的RADIUS Server 的設(shè)計(jì)方案和實(shí)現(xiàn)策略,規(guī)則的引入可以很方便
發(fā)表于 09-14 08:20
?23次下載
請注意,在單個(gè)CPU上讀寫鎖比RCU慢一個(gè)數(shù)量級,在16個(gè)CPU上讀寫鎖比RCU幾乎要慢兩個(gè)數(shù)量級。隨著CPU數(shù)量的增加,RCU的擴(kuò)展性優(yōu)勢越來越突出。可以這么說,RCU幾乎就是水平擴(kuò)
發(fā)表于 05-10 09:13
?1.1w次閱讀
前面我們有聊過樂觀鎖和悲觀鎖的實(shí)現(xiàn),均是對于單體架構(gòu)的場景下的實(shí)現(xiàn)。那么現(xiàn)在我們來總結(jié)看下分布式情況下如何實(shí)現(xiàn)
發(fā)表于 07-01 14:53
?3248次閱讀
讀寫鎖是另一種實(shí)現(xiàn)線程間同步的方式。與互斥量類似,但讀寫鎖將操作分為讀、寫兩種方式,可以多個(gè)線程同時(shí)占用讀模式的
發(fā)表于 09-27 14:57
?3054次閱讀
是不是很多人都對 MySQL 加行級鎖的規(guī)則搞的迷迷糊糊,對記錄一會(huì)加的是 next-key 鎖,一會(huì)加是間隙鎖,一會(huì)又是記錄鎖。
發(fā)表于 11-17 09:28
?752次閱讀
下面我會(huì)分析一下自旋鎖,并代碼實(shí)現(xiàn)自旋鎖和互斥鎖的性能對比,以及利用C++11實(shí)現(xiàn)自旋鎖。 一:
發(fā)表于 11-11 16:48
?1316次閱讀
機(jī)制,下面將詳細(xì)介紹如何實(shí)現(xiàn)Redis分布式鎖。 一、引言 在分布式系統(tǒng)中,多個(gè)節(jié)點(diǎn)可能同時(shí)讀寫同一共享資源。如果沒有實(shí)現(xiàn)互斥訪問和同步機(jī)制,就會(huì)產(chǎn)生數(shù)據(jù)不一致和競態(tài)條件等問題。解決這
發(fā)表于 12-04 11:24
?608次閱讀
保護(hù)共享資源不被多個(gè)線程同時(shí)訪問。它的實(shí)現(xiàn)原理主要包括以下幾個(gè)方面: 1. 鎖的初始化 互斥鎖在創(chuàng)建時(shí)需要進(jìn)行初始化,通常包括設(shè)置鎖的狀態(tài)為“未鎖定”。在某些實(shí)現(xiàn)中,還需要初始化
發(fā)表于 07-10 10:07
?346次閱讀
評論