一次只有乙個執行緒可以占有寫模式的讀寫鎖,但是可以有多個執行緒同時占有讀模式的讀寫鎖,正是因為這個特性,當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前, 所有試圖對這個鎖加鎖的執行緒都會被阻塞。
通常,當讀寫鎖處於讀模式鎖住狀態時,如果有另外執行緒試圖以寫模式加鎖,讀寫鎖通常會阻塞隨後的讀模式鎖請求, 這樣可以避免讀模式鎖長期占用, 而等待的寫模式鎖請求長期阻塞。
初始化操作:
pthread_rwlock_init(
pthread_rwlock_t *restrict rwlock,
const pthread_rwlockattr_t *restrict attr
);銷毀鎖操作:
pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
成功則返回0,出錯則返回錯誤編號
pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
這3個函式分別實現獲取讀鎖, 獲取寫鎖和釋放鎖的操作
#include
#include
#include
#include
#include
#include
static pthread_rwlock_t rwlock;
//讀寫鎖物件
int count =0;
void
*thread_function_read
(void
*arg)
return
null;}
void
*thread_function_write
(void
*arg)
return
null;}
intmain
(int argc,
char
*ar**)
***
139633593894656
, read count 0**
*139633585501952
, read count 0**
*139633442891520
, write count 1**
*139633593894656
, read count 1**
*139633585501952
, read count 1..
.
Linux多執行緒程式設計之讀寫鎖
讀寫鎖也是執行緒同步中的一種同步機制,簡單的來說 讀寫鎖既有讀的方面也有寫的方面,其中讀是共享鎖,而寫是獨佔鎖,而且系統中讀寫鎖的分配是寫鎖優先的。下面的用例,證明了讀鎖是共享鎖。thread fun1中加了讀鎖,但並沒有解讀鎖 thread fun2中也可以加讀鎖執行 如果thread fun2中...
多執行緒程式設計 RW LOCK 讀寫鎖
rw鎖 讀寫鎖,也叫共享獨佔鎖 互斥量 要麼是鎖住狀態,要麼是不加鎖狀態,而且一次只有乙個執行緒可以對其加鎖。讀寫鎖可以有三種狀態,讀模式下加鎖狀態,寫模式下加鎖狀態,不加鎖狀態。一次只有乙個執行緒可以占有寫模式的讀寫鎖,但是多個執行緒可以同時占有讀模式的讀寫鎖。和互斥量一樣,讀寫鎖在使用之前必須初...
多執行緒程式設計之讀寫鎖
讀寫問題是乙個經典的同步問題,主要針對保護很少更新的資料結構這種同步情況。假設有乙個用於儲存dns條目快取的表,它用來將網域名稱解析為相應的ip位址。通常,乙個給定的dns條目將在很長一段時間裡保持不變 在許多情況下,dns條目會保持數年不變。雖然隨著使用者訪問不同的 新的條目可能會被不時地新增到表...