c 11實現寫優先的讀寫鎖

2021-08-10 18:38:33 字數 1763 閱讀 1459

文章**:

先直接貼出**:

#ifndef __write_first_rw_lock_h

#define __write_first_rw_lock_h

#include

#include

class

wfirstrwlock

); ++read_cnt;

}void

lock_write

() );

inwriteflag = true;

}void

release_read

()

}void

release_write

()

else

inwriteflag = false;

}private:

volatile

size_t

read_cnt;

volatile

size_t

write_cnt;

volatile

bool

inwriteflag;

std::mutex

counter_mutex;

std::condition_variable

cond_w;

std::condition_variable

cond_r;

};template

_rwlockable>

class

unique_writeguard

~unique_writeguard

()

private:

unique_writeguard

() = delete;

unique_writeguard

(const unique_writeguard&) = delete;

unique_writeguard& operator=(const unique_writeguard&) = delete;

private:

_rwlockable &rw_lockable_;

};template

_rwlockable>

class

unique_readguard

~unique_readguard

()

private:

unique_readguard

() = delete;

unique_readguard

(const unique_readguard&) = delete;

unique_readguard& operator=(const unique_readguard&) = delete;

private:

_rwlockable &rw_lockable_;

};#endif

可以看出用c++11實現讀寫鎖變得非常簡潔,在讀取量非常大且寫入頻率很低的時候,通過乙個簡單的寫入執行緒計數可以避免大量的 cond_w.notify_one();減少讀取執行緒因此發生的切換。

這裡需要注意的是對寫操作加鎖時是先增加寫執行緒計數再判斷條件並等待,釋放寫鎖時減少寫執行緒計數並判斷是否還有寫操作等待,如果有只能喚醒乙個寫等待。

另外,直接使用lock、unlock在c++中是不推薦的,推薦採用raii方法,即類unique_writeguard、unique_readguard。

C 11讀寫鎖的實現

參考的原始碼 讀寫鎖,一直都有聽,也大概知道點原理,一直沒有 內部是如何實現的,正好今天完成了幾項大作業,研究一下讀寫鎖實現的原理。讀寫鎖的原理就是,可以多次讀,但是寫只能一次一次的寫入,我參考的原始碼博主控制了寫優先,並且讀的優先順序沒我寫的這麼高。我自己在修改了他的原始碼,實現的是讀優先,並且優...

c 11 寫者優先

include include include include includeusing namespace std class semaphere semaphere const semaphere s delete semaphere operator const semaphere s del...

c 11自旋鎖的實現

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