多執行緒程式設計 RW LOCK 讀寫鎖

2021-07-15 19:52:45 字數 1176 閱讀 9754

rw鎖 讀寫鎖,也叫共享獨佔鎖

互斥量 要麼是鎖住狀態,要麼是不加鎖狀態,而且一次只有乙個執行緒可以對其加鎖。

讀寫鎖可以有三種狀態,讀模式下加鎖狀態,寫模式下加鎖狀態,不加鎖狀態。一次只有乙個執行緒可以占有寫模式的讀寫鎖,但是多個執行緒可以同時占有讀模式的讀寫鎖。

和互斥量一樣,讀寫鎖在使用之前必須初始化,在釋放他們底層的記憶體前必須銷毀。

要在讀模式下鎖定讀寫鎖,需要呼叫pthread_rwlock_rdlock;

要在寫模式下鎖定讀寫鎖,需要呼叫pthread_rwlock_wrlock;

不管以何種方式鎖住讀寫鎖,都可以呼叫pthread_rwlock_unlock 進行解鎖。

在讀操作遠遠高於寫操作的時候,使用讀寫鎖才可能改善效能。

下面給出乙個cpp 版本的 rw_lock

rwlock.h

class rwlock ;

rw_lock.cc

rwlock::rwlock() 

rwlock::~rwlock()

void rwlock::readlock()

void rwlock::writelock()

void rwlock::unlock()

void rwlock::readunlock()

void rwlock::writeunlock()

bool rwlock::isreadlocked()

bool rwlock::iswritelocked()

同樣,不建議直接使用成員函式來上鎖,需要寫乙個readlockguard模版來更好的使用鎖,防止出錯。

template

locktye>

class

readlockguard

~readlockguard

() private:

locktype* lock_;

};template locktype>

class

writelockguard

~writelockguard

() private:

locktype* lock_;

};

Linux執行緒同步讀寫鎖 rwlock

讀寫鎖比mutex有更高的適用性,可以多個執行緒同時占用讀模式的讀寫鎖,但是只能乙個執行緒占用寫模式的讀寫鎖。1.當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞 2.當讀寫鎖在讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的執行緒都可以得到訪問權,但是以寫模式對它進行...

Linux執行緒同步讀寫鎖 rwlock

linux執行緒同步讀寫鎖 rwlock 讀寫鎖比mutex有更高的適用性,可以多個執行緒同時占用讀模式的讀寫鎖,但是只能乙個執行緒占用寫模式的讀寫鎖。1.當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞 2.當讀寫鎖在讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的執...

Linux執行緒同步 3 讀寫鎖 rwlock

1.特性 一次只有乙個執行緒可以占有寫模式的讀寫鎖,但是可以有多個執行緒同時占有讀模式的讀寫鎖.正是因為這個特性,2.適用性 讀寫鎖適合於對資料結構的讀次數比寫次數多得多的情況.因為,讀模式鎖定時可以共享,以寫模式鎖住時意味著獨佔,所以讀寫鎖又叫共享 獨佔鎖.3.初始化和銷毀 include pth...