unix環境高階程式設計 讀寫鎖

2021-08-04 08:56:36 字數 1060 閱讀 7091

1.需要注意的地方

2.讀寫鎖適合的情況

讀寫鎖非常適合對於資料結構讀的次數遠大於寫的情況。

3.讀寫鎖相關介面

讀寫鎖又稱為共享互斥鎖,是一種特殊的自旋鎖。讀模式又稱共享模式,寫模式又稱互斥模式。

#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, 出錯則返回錯誤編號.

#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個函式分別實現獲取讀鎖, 獲取寫鎖和釋放鎖的操作. 獲取鎖的兩個函式是阻塞操作, 同樣, 非阻塞的函式為:

#include int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);

int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

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

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

帶有超時的讀寫鎖

#include #includeint pthread_rwlock_timedrdlock(pthread_rwlock_t *rwlock);

int pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock);

unix環境高階程式設計 自旋鎖

自旋鎖是smp架構中的一種low level的同步機制。當執行緒a想要獲取一把自旋鎖而該鎖又被其它執行緒鎖持有時,執行緒a會在乙個迴圈中自旋以檢測鎖是不是已經可用了。對於自選鎖需要注意 使用任何鎖需要消耗系統資源 記憶體資源和cpu時間 這種資源消耗可以分為兩類 1 int pthread spin...

自旋鎖(UNIX環境高階程式設計筆記)

自旋鎖與互斥量類似,但它不是通過休眠使程序阻塞,而是在獲取鎖之前一直處於忙等 自旋 阻塞狀態。自旋鎖可以用於以下情況 鎖被持有的時間短,而且執行緒並不希望在重新排程上花費太多的成本。很多互斥量的實現非常高效,以至於應用程式採用互斥鎖的效能與曾經採用過自旋鎖的效能基本是相同的。有些互斥量的實現在試圖獲...

unix環境高階程式設計

unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...