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...