Linux執行緒同步 3 讀寫鎖 rwlock

2021-04-13 07:20:21 字數 1174 閱讀 6786

1. 特性:

一次只有乙個執行緒可以占有寫模式的讀寫鎖, 但是可以有多個執行緒同時占有讀模式的讀寫鎖. 正是因為這個特性,

2. 適用性:

讀寫鎖適合於對資料結構的讀次數比寫次數多得多的情況. 因為, 讀模式鎖定時可以共享, 以寫模式鎖住時意味著獨佔, 所以讀寫鎖又叫共享-獨佔鎖.

3. 初始化和銷毀:

#include 

<

pthread.h

>

intpthread_rwlock_init(pthread_rwlock_t 

*restrict rwlock, 

const

pthread_rwlockattr_t 

*restrict attr);

intpthread_rwlock_destroy(pthread_rwlock_t 

*rwlock);

成功則返回0, 出錯則返回錯誤編號.

同互斥量以上, 在釋放讀寫鎖占用的記憶體之前, 需要先通過pthread_rwlock_destroy對讀寫鎖進行清理工作, 釋放由init分配的資源.

4. 讀和寫:

#include 

<

pthread.h

>

intpthread_rwlock_rdlock(pthread_rwlock_t 

*rwlock);

intpthread_rwlock_wrlock(pthread_rwlock_t 

*rwlock);

intpthread_rwlock_unlock(pthread_rwlock_t 

*rwlock);

成功則返回0, 出錯則返回錯誤編號.

這3個函式分別實現獲取讀鎖, 獲取寫鎖和釋放鎖的操作. 獲取鎖的兩個函式是阻塞操作, 同樣, 非阻塞的函式為:

#include 

<

pthread.h

>

intpthread_rwlock_tryrdlock(pthread_rwlock_t 

*rwlock);

intpthread_rwlock_trywrlock(pthread_rwlock_t 

*rwlock);

成功則返回0, 出錯則返回錯誤編號.

非阻塞的獲取鎖操作, 如果可以獲取則返回0, 否則返回錯誤的ebusy.

Linux執行緒同步 讀寫鎖

讀寫鎖和互斥量 互斥鎖 很類似,是另一種執行緒同步機制,但不屬於posix標準,可以用來同步同一程序中的各個執行緒。當然如果乙個讀寫鎖存放在多個程序共享的某個記憶體區中,那麼還可以用來進行程序間的同步.和互斥量不同的是 互斥量會把試圖進入已保護的臨界區的執行緒都阻塞 然而讀寫鎖會視當前進入臨界區的執...

linux執行緒同步之讀寫鎖

讀寫鎖與互斥量類似,不過讀寫鎖的並行性更高。讀寫鎖可以有三種狀態 1 讀模式加鎖 2 寫模式加鎖 3 不加鎖。在寫加鎖狀態時,在解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞。在讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的執行緒都可以得到訪問許可權。但是如果執行緒希望以寫模式加鎖,它必須阻塞,直至...

Linux執行緒同步之讀寫鎖

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