自旋鎖,和互斥鎖類似,都是為了保證線程安全的鎖。但二者的區別是不一樣的,對于互斥鎖,當一個線程獲得這個鎖之后,其他想要獲得此鎖的線程將會被阻塞,直到該鎖被釋放。但自選鎖不一樣,當一個線程獲得鎖之后,其他線程將會一直循環在哪里查看是否該鎖被釋放。所以,此鎖比較適用于鎖的持有者保存時間較短的情況下。
// 初始化
spinLock = OS_SPINLOCK_INIT;
// 加鎖
OSSpinLockLock(&spinLock);
//
解鎖 OSSpinLockUnlock(&spinLock);
然而,YYKit 作者 @ibireme 的文章也有說這個自旋鎖存在優先級反轉問題,具體文章可以戳 不再安全的 OSSpinLock。