精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

讀寫(xiě)鎖的實(shí)現(xiàn)原理規(guī)則

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開(kāi)發(fā) ? 作者:嵌入式Linux系統(tǒng)開(kāi) ? 2023-07-21 11:21 ? 次閱讀

讀寫(xiě)鎖

互斥鎖或自旋鎖要么是加鎖狀態(tài)、要么是不加鎖狀態(tài),而且一次只有一個(gè)線(xiàn)程可以對(duì)其加鎖。

讀寫(xiě)鎖有3 種狀態(tài):讀模式下的加鎖狀態(tài)(以下簡(jiǎn)稱(chēng)讀加鎖狀態(tài))、寫(xiě)模式下的加鎖狀態(tài)(以下簡(jiǎn)稱(chēng)寫(xiě)加鎖狀態(tài))和不加鎖狀態(tài)(見(jiàn)),一次只有一個(gè)線(xiàn)程可以占有寫(xiě)模式的讀寫(xiě)鎖,但是可以有多個(gè)線(xiàn)程同時(shí)占有讀模式的讀寫(xiě)鎖。因此可知,讀寫(xiě)鎖比互斥鎖具有更高的并行性!

圖片

讀寫(xiě)鎖有如下兩個(gè)規(guī)則:

  1. 當(dāng)讀寫(xiě)鎖處于寫(xiě)加鎖狀態(tài)時(shí),在這個(gè)鎖被解鎖之前,所有試圖對(duì)這個(gè)鎖進(jìn)行加鎖操作(不管是以讀模式加鎖還是以寫(xiě)模式加鎖)的線(xiàn)程都會(huì)被阻塞。
  2. 當(dāng)讀寫(xiě)鎖處于讀加鎖狀態(tài)時(shí),所有試圖以讀模式對(duì)它進(jìn)行加鎖的線(xiàn)程都可以加鎖成功;但是任何以寫(xiě)模式對(duì)它進(jìn)行加鎖的線(xiàn)程都會(huì)被阻塞,直到所有持有讀模式鎖的線(xiàn)程釋放它們的鎖為止。

讀寫(xiě)鎖非常適合于對(duì)共享數(shù)據(jù)讀的次數(shù)遠(yuǎn)大于寫(xiě)的次數(shù)的情況。

初始化和銷(xiāo)毀讀寫(xiě)鎖

#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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11232

    瀏覽量

    208958
  • 線(xiàn)程
    +關(guān)注

    關(guān)注

    0

    文章

    504

    瀏覽量

    19653
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux下線(xiàn)程間通訊---讀寫(xiě)和條件變量

    讀寫(xiě),它把對(duì)共享資源的訪(fǎng)問(wèn)者劃分成讀者和寫(xiě)者,讀者只對(duì)共享資源進(jìn)行讀訪(fǎng)問(wèn),寫(xiě)者則需要對(duì)共享資源進(jìn)行寫(xiě)操作。件變量是線(xiàn)程可用的一種同步機(jī)制,條件變量給多個(gè)線(xiàn)程提供了一個(gè)回合的場(chǎng)所,條件變量和互斥量一起使用,允許線(xiàn)程以無(wú)競(jìng)爭(zhēng)的方式等待特定的條件發(fā)生。
    的頭像 發(fā)表于 08-26 20:44 ?1434次閱讀
    Linux下線(xiàn)程間通訊---<b class='flag-5'>讀寫(xiě)</b><b class='flag-5'>鎖</b>和條件變量

    Rust 語(yǔ)言中的 RwLock內(nèi)部實(shí)現(xiàn)原理

    Rust是一種系統(tǒng)級(jí)編程語(yǔ)言,它帶有嚴(yán)格的內(nèi)存管理、并發(fā)和安全性規(guī)則,因此很受廣大程序員的青睞。RwLock(讀寫(xiě))是 Rust 中常用的線(xiàn)程同步機(jī)制之一,本文將詳細(xì)介紹 Rust 語(yǔ)言
    的頭像 發(fā)表于 09-20 11:23 ?833次閱讀

    ADA4350如何實(shí)現(xiàn)串口讀寫(xiě)

      問(wèn):ADA4350可寫(xiě)不可讀是怎么回事,如何實(shí)現(xiàn)串口讀寫(xiě)?
    的頭像 發(fā)表于 10-31 16:35 ?806次閱讀
    ADA4350如何<b class='flag-5'>實(shí)現(xiàn)</b>串口<b class='flag-5'>讀寫(xiě)</b>

    Linux讀寫(xiě)邏輯解析—嘗試獲取寫(xiě)

    Rwsem的count成員還有一些bit用來(lái)標(biāo)記當(dāng)前讀寫(xiě)狀態(tài)(waiter bit和handoff bit),也需要根據(jù)情況進(jìn)行調(diào)整
    的頭像 發(fā)表于 12-04 11:12 ?640次閱讀
    Linux<b class='flag-5'>讀寫(xiě)</b><b class='flag-5'>鎖</b>邏輯解析—嘗試獲取寫(xiě)<b class='flag-5'>鎖</b>

    命名管道FIFO讀寫(xiě)規(guī)則

    Linux命名管道FIFO的讀寫(xiě)規(guī)則《Linux程序設(shè)計(jì)(第3版)》對(duì)于Linux命名管道的讀寫(xiě)規(guī)則詳解的不夠詳細(xì)和清楚,查了些資料,在此總結(jié)一下: 1.從FIFO中讀取數(shù)據(jù):約定:如
    發(fā)表于 09-24 10:49

    Lock體系結(jié)構(gòu)和讀寫(xiě)機(jī)制解析

    中,如何實(shí)現(xiàn)ABC的順序打印問(wèn)題,基本思路就是基于線(xiàn)程的等待通知機(jī)制,但是實(shí)現(xiàn)方式很多,上述只是其中一種方式。二、讀寫(xiě)機(jī)制1、基礎(chǔ)API簡(jiǎn)介重入
    發(fā)表于 01-05 17:53

    RT-Thread實(shí)現(xiàn)的互斥屬性包括哪些

    * lock);函數(shù)返回 lock無(wú)效返回EINVAL,否則返回0或EPERM。互斥屬性RT-Thread實(shí)現(xiàn)的互斥屬性包括互斥類(lèi)型和互斥
    發(fā)表于 08-12 15:06

    基于規(guī)則的RADIUS Server設(shè)計(jì)與實(shí)現(xiàn)

             本文在分析RADIUS 協(xié)議原理基礎(chǔ)上,給出了一種基于規(guī)則的RADIUS Server 的設(shè)計(jì)方案和實(shí)現(xiàn)策略,規(guī)則的引入可以很方便
    發(fā)表于 09-14 08:20 ?23次下載

    深入理解Linux RCU:RCU是讀寫(xiě)的替代者

    請(qǐng)注意,在單個(gè)CPU上讀寫(xiě)比RCU慢一個(gè)數(shù)量級(jí),在16個(gè)CPU上讀寫(xiě)比RCU幾乎要慢兩個(gè)數(shù)量級(jí)。隨著CPU數(shù)量的增加,RCU的擴(kuò)展性?xún)?yōu)勢(shì)越來(lái)越突出。可以這么說(shuō),RCU幾乎就是水平擴(kuò)
    的頭像 發(fā)表于 05-10 09:13 ?1.1w次閱讀
    深入理解Linux RCU:RCU是<b class='flag-5'>讀寫(xiě)</b><b class='flag-5'>鎖</b>的替代者

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

    前面我們有聊過(guò)樂(lè)觀和悲觀實(shí)現(xiàn),均是對(duì)于單體架構(gòu)的場(chǎng)景下的實(shí)現(xiàn)。那么現(xiàn)在我們來(lái)總結(jié)看下分布式情況下如何實(shí)現(xiàn)
    的頭像 發(fā)表于 07-01 14:53 ?3303次閱讀
    分布式<b class='flag-5'>鎖</b>的基本原理和案例<b class='flag-5'>實(shí)現(xiàn)</b>

    詳談Linux操作系統(tǒng)的三種狀態(tài)的讀寫(xiě)

    讀寫(xiě)是另一種實(shí)現(xiàn)線(xiàn)程間同步的方式。與互斥量類(lèi)似,但讀寫(xiě)將操作分為讀、寫(xiě)兩種方式,可以多個(gè)線(xiàn)程同時(shí)占用讀模式的
    的頭像 發(fā)表于 09-27 14:57 ?3091次閱讀

    MySQL是怎么加行級(jí)的?有什么規(guī)則

    是不是很多人都對(duì) MySQL 加行級(jí)規(guī)則搞的迷迷糊糊,對(duì)記錄一會(huì)加的是 next-key ,一會(huì)加是間隙,一會(huì)又是記錄
    的頭像 發(fā)表于 11-17 09:28 ?782次閱讀

    如何用C++11實(shí)現(xiàn)自旋

    下面我會(huì)分析一下自旋,并代碼實(shí)現(xiàn)自旋和互斥的性能對(duì)比,以及利用C++11實(shí)現(xiàn)自旋。 一:
    的頭像 發(fā)表于 11-11 16:48 ?1390次閱讀
    如何用C++11<b class='flag-5'>實(shí)現(xiàn)</b>自旋<b class='flag-5'>鎖</b>

    如何實(shí)現(xiàn)Redis分布式

    機(jī)制,下面將詳細(xì)介紹如何實(shí)現(xiàn)Redis分布式。 一、引言 在分布式系統(tǒng)中,多個(gè)節(jié)點(diǎn)可能同時(shí)讀寫(xiě)同一共享資源。如果沒(méi)有實(shí)現(xiàn)互斥訪(fǎng)問(wèn)和同步機(jī)制,就會(huì)產(chǎn)生數(shù)據(jù)不一致和競(jìng)態(tài)條件等問(wèn)題。解決這
    的頭像 發(fā)表于 12-04 11:24 ?668次閱讀

    互斥和自旋實(shí)現(xiàn)原理

    保護(hù)共享資源不被多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)。它的實(shí)現(xiàn)原理主要包括以下幾個(gè)方面: 1. 的初始化 互斥鎖在創(chuàng)建時(shí)需要進(jìn)行初始化,通常包括設(shè)置的狀態(tài)為“未鎖定”。在某些實(shí)現(xiàn)中,還需要初始化
    的頭像 發(fā)表于 07-10 10:07 ?420次閱讀