C 11讀寫鎖的實現

2021-10-14 07:04:59 字數 1016 閱讀 2661

參考的原始碼

讀寫鎖,一直都有聽,也大概知道點原理,一直沒有**內部是如何實現的,正好今天完成了幾項大作業,研究一下讀寫鎖實現的原理。

讀寫鎖的原理就是,可以多次讀,但是寫只能一次一次的寫入,我參考的原始碼博主控制了寫優先,並且讀的優先順序沒我寫的這麼高。我自己在修改了他的原始碼,實現的是讀優先,並且優先順序很高,如果存在大量的讀操作,可能會出現寫操作執行緒飢餓的現象。如果在具體的場景中寫操作也多,可以修改wait條件來判斷優先順序。我最近的感悟,如果非必要,乙個類的物件不必非要跨執行緒操作。物件不跨執行緒操作,也就不涉及這種飢餓問題了

#include

#include

#include

#include

#include

using

namespace std;

class

readwritelock

void

readlock()

);// 讀鎖優先

cond.

wait

(lock,[&

]())

;++reading;

--readwaiting;

}void

writelock()

);++writing;

--writewaiting;

}void

readunlock()

void

writeunlock()

};//true 為寫者優先,不過我修改了原始碼,true或者false都沒有意義了

readwritelock readwritelock

(false);

// 鎖都是要等三秒鐘才釋放鎖

void

reader()

void

writer()

intmain()

for(

int i =

0; i < vec.

size()

;++i)

}

c 11實現寫優先的讀寫鎖

文章 先直接貼出 ifndef write first rw lock h define write first rw lock h include include class wfirstrwlock read cnt void lock write inwriteflag true void r...

c 11自旋鎖的實現

首先我們需要明確,自旋鎖式一種用於保護多執行緒共享資源的鎖,它在linux 核心中也有所使用.epoll 中有使用 和一般互斥鎖不同的式當自旋鎖嘗試獲取cpu的時候可以是一種忙等的狀態,自旋鎖不能主動放棄cpu 如果是核心中的自旋鎖,如果沒有及時釋放一種拿到手中,可能會導致系統掛起 我們在這裡使用c...

C 11 中的幾種鎖

可以避免多個執行緒在某一時刻同時操作乙個共享資源,標準c 庫提供了std unique lock類模板,實現了互斥鎖的raii慣用語法 eg std unique locklk mtx sync 條件鎖就是所謂的條件變數,某乙個執行緒因為某個條件未滿足時可以使用條件變數使該程式處於阻塞狀態。一旦條件...