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

2021-09-19 10:33:31 字數 942 閱讀 2834

自旋鎖與互斥量類似,但它不是通過休眠使程序阻塞,而是在獲取鎖之前一直處於忙等(自旋)阻塞狀態。自旋鎖可以用於以下情況:鎖被持有的時間短,而且執行緒並不希望在重新排程上花費太多的成本。

很多互斥量的實現非常高效,以至於應用程式採用互斥鎖的效能與曾經採用過自旋鎖的效能基本是相同的。有些互斥量的實現在試圖獲取互斥量的時候會自旋一小段時間,只有在自旋計數達到某一閾值時才會休眠。這些因素,加上現代處理器的進步,使得上下文切換原來越快,也使得自旋鎖只在某些特定的情況下有用。

自旋鎖的介面與互斥量的介面類似,這使得它可以比較容易的從乙個替換為另乙個。可以用pthread_spin_init函式對自旋鎖進行初始化。用pthread_spin_destroy函式進行自旋鎖的反初始化。

#include

int pthread_spin_init(pthread_spinlock_t *lock, int pshared);

int pthread_spin_destroy(pthread_spinlock_t *lock);

兩個函式的返回值:若成功,返回0;否則,返回錯誤編號

pshared引數表示程序共享屬性,表明自旋鎖是如何獲取的。

可以用pthread_spin_lock或pthread_spin_trylock對自旋鎖進行加鎖,前者在獲取自旋鎖之前一直自旋,後者如果不能獲取鎖,就立即返回ebusy錯誤,不會自旋。不管以何種方式加鎖,都可以呼叫pthread_spin_unlock函式對自旋鎖解鎖。

#include

int pthread_spin_lock(pthread_spinlock_t *lock);

int pthread_spin_trylock(pthread_spinlock_t *lock);

int pthread_spin_unlock(pthread_spinlock_t *lock);

所有函式的返回值:若成功,返回0;否則,返回錯誤編號

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

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

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

1.需要注意的地方 2.讀寫鎖適合的情況 讀寫鎖非常適合對於資料結構讀的次數遠大於寫的情況。3.讀寫鎖相關介面 讀寫鎖又稱為共享互斥鎖,是一種特殊的自旋鎖。讀模式又稱共享模式,寫模式又稱互斥模式。include int pthread rwlock init pthread rwlock t res...

《unix環境高階程式設計》筆記2

第四章 檔案和目錄 本章將描述檔案系統特徵和檔案性質 1 stat fstat和lstat函式 原型 include int stat const char restrict pathname,struct stat restrict buf int fstat int filedes,struct...