讀寫鎖
互斥鎖或自旋鎖要么是加鎖狀態、要么是不加鎖狀態,而且一次只有一個線程可以對其加鎖。
讀寫鎖有3 種狀態:讀模式下的加鎖狀態(以下簡稱讀加鎖狀態)、寫模式下的加鎖狀態(以下簡稱寫加鎖狀態)和不加鎖狀態(見),一次只有一個線程可以占有寫模式的讀寫鎖,但是可以有多個線程同時占有讀模式的讀寫鎖。因此可知,讀寫鎖比互斥鎖具有更高的并行性!
讀寫鎖有如下兩個規則:
- 當讀寫鎖處于寫加鎖狀態時,在這個鎖被解鎖之前,所有試圖對這個鎖進行加鎖操作(不管是以讀模式加鎖還是以寫模式加鎖)的線程都會被阻塞。
- 當讀寫鎖處于讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的線程都可以加鎖成功;但是任何以寫模式對它進行加鎖的線程都會被阻塞,直到所有持有讀模式鎖的線程釋放它們的鎖為止。
讀寫鎖非常適合于對共享數據讀的次數遠大于寫的次數的情況。
初始化和銷毀讀寫鎖
#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
+關注
關注
87文章
11345瀏覽量
210392 -
線程
+關注
關注
0文章
505瀏覽量
19758
發布評論請先 登錄
相關推薦
Linux下線程間通訊---讀寫鎖和條件變量
讀寫鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。件變量是線程可用的一種同步機制,條件變量給多個線程提供了一個回合的場所,條件變量和互斥量一起使用,允許線程以無競爭的方式等待特定的條件發生。
Rust 語言中的 RwLock內部實現原理
Rust是一種系統級編程語言,它帶有嚴格的內存管理、并發和安全性規則,因此很受廣大程序員的青睞。RwLock(讀寫鎖)是 Rust 中常用的線程同步機制之一,本文將詳細介紹 Rust 語言
命名管道FIFO讀寫規則
Linux命名管道FIFO的讀寫規則《Linux程序設計(第3版)》對于Linux命名管道的讀寫規則詳解的不夠詳細和清楚,查了些資料,在此總結一下: 1.從FIFO中讀取數據:約定:如
發表于 09-24 10:49
Lock體系結構和讀寫鎖機制解析
中,如何實現ABC的順序打印問題,基本思路就是基于線程的等待通知機制,但是實現方式很多,上述只是其中一種方式。二、讀寫鎖機制1、基礎API簡介重入鎖
發表于 01-05 17:53
RT-Thread實現的互斥鎖屬性包括哪些
* lock);函數返回 lock無效返回EINVAL,否則返回0或EPERM。互斥鎖屬性RT-Thread實現的互斥鎖屬性包括互斥鎖類型和互斥鎖
發表于 08-12 15:06
基于規則的RADIUS Server設計與實現
本文在分析RADIUS 協議原理基礎上,給出了一種基于規則的RADIUS Server 的設計方案和實現策略,規則的引入可以很方便
發表于 09-14 08:20
?23次下載
深入理解Linux RCU:RCU是讀寫鎖的替代者
請注意,在單個CPU上讀寫鎖比RCU慢一個數量級,在16個CPU上讀寫鎖比RCU幾乎要慢兩個數量級。隨著CPU數量的增加,RCU的擴展性優勢越來越突出。可以這么說,RCU幾乎就是水平擴
詳談Linux操作系統的三種狀態的讀寫鎖
讀寫鎖是另一種實現線程間同步的方式。與互斥量類似,但讀寫鎖將操作分為讀、寫兩種方式,可以多個線程同時占用讀模式的
MySQL是怎么加行級鎖的?有什么規則?
是不是很多人都對 MySQL 加行級鎖的規則搞的迷迷糊糊,對記錄一會加的是 next-key 鎖,一會加是間隙鎖,一會又是記錄鎖。
如何實現Redis分布式鎖
機制,下面將詳細介紹如何實現Redis分布式鎖。 一、引言 在分布式系統中,多個節點可能同時讀寫同一共享資源。如果沒有實現互斥訪問和同步機制,就會產生數據不一致和競態條件等問題。解決這
互斥鎖和自旋鎖的實現原理
保護共享資源不被多個線程同時訪問。它的實現原理主要包括以下幾個方面: 1. 鎖的初始化 互斥鎖在創建時需要進行初始化,通常包括設置鎖的狀態為“未鎖定”。在某些實現中,還需要初始化
評論