Linux多執行緒程式設計 利用讀寫鎖實現讀寫互斥

2021-10-05 21:22:18 字數 1338 閱讀 6266

一次只有乙個執行緒可以占有寫模式的讀寫鎖,但是可以有多個執行緒同時占有讀模式的讀寫鎖,正是因為這個特性,當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前, 所有試圖對這個鎖加鎖的執行緒都會被阻塞。

通常,當讀寫鎖處於讀模式鎖住狀態時,如果有另外執行緒試圖以寫模式加鎖,讀寫鎖通常會阻塞隨後的讀模式鎖請求, 這樣可以避免讀模式鎖長期占用, 而等待的寫模式鎖請求長期阻塞。

初始化操作:

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條目會保持數年不變。雖然隨著使用者訪問不同的 新的條目可能會被不時地新增到表...