Linux執行緒同步之讀寫鎖

2021-06-26 12:37:18 字數 1207 閱讀 4239

讀寫鎖比mutex有更高的適用性,可以多個執行緒同時占用讀模式的讀寫鎖,但是只能乙個執行緒占用寫模式的讀寫鎖。

1. 當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞;

2. 當讀寫鎖在讀加鎖狀態時,所有試圖以讀模式對它進行加鎖的執行緒都可以得到訪問權,但是以寫模式對它進行枷鎖的執行緒將阻塞;

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

這種鎖適用對資料結構進行讀的次數比寫的次數多的情況下,因為可以進行讀鎖共享。

api介面說明:

1) 初始化和銷毀

#include
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

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

2) 讀加鎖和寫加鎖

獲取鎖的兩個函式是阻塞操作

#include
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);

int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);

int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);

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

3) 非阻塞獲得讀鎖和寫鎖

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

#include
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);

int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

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

linux執行緒同步之讀寫鎖

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

Linux執行緒同步 讀寫鎖

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

Linux 執行緒同步與互斥之讀寫鎖

linux執行緒讀寫鎖 在編寫多執行緒的時候,有一種情況是十分常見的。那就是,有些公共資料修改的機會比較少。相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢的操作,中間耗時很長。給這種 段加鎖,會極大地降低我們程式的效率。以為讀者寫者為例,讀者可能會乙個接乙個來讀,寫者可能...