當前位置:成語大全網 - 書法字典 - IOS線程同步(各種鎖)

IOS線程同步(各種鎖)

在iOS的開發中,經常會遇到壹個資源被多個線程共享的情況,即多個線程會訪問同壹個資源,比如同壹個對象、同壹個變量、同壹個文件。當多個線程訪問同壹個資源時,很容易造成數據混亂和數據安全問題。

使用線程同步技術(同步是以預先確定的順序協調步伐),通用同步技術是鎖定的。

OSSpinLock被稱為“自旋鎖”,等待鎖的線程會處於忙等待狀態,壹直占用CPU資源。目前已經不安全,從iOS10開始已經棄用,可能會出現優先級反轉的問題。如果等待鎖的線程優先級較高,那麽它會壹直占用CPU資源,優先級較低的線程將無法釋放鎖,所以頭文件# import < lib kern/osatomic . h & gt;。

Os _ unfair _ lock用於替代不安全的OSSpinLock,僅從iOS10開始支持。從底層調用開始,等待os _ unfair _ lock的線程會休眠,不忙等。,所以頭文件# import

互斥體稱為“Mutex”,等待鎖的線程會處於休眠狀態,所以頭文件# import < pthread.h & gt

NSLock和NSRecursiveLock是互斥普通鎖的封裝,NSLock遵循NSLocking協議。

初始化鎖nslock * lock =[[nslock alloc]init];

NSRecursiveLock也是互斥遞歸鎖的封裝,API基本和NSLock壹樣。

NSCondition是互斥體和cond的封裝,NSCondition符合NSLocking協議。

NSCondition通常用於生產者-消費者模式的業務中。當條件不滿足時,調用wait方法讓消費線程等待,當條件滿足時,調用signal方法通知消費線程。

NSConditionLock是對NSCondition的進壹步封裝,可以設置具體的條件值。

NSConditionLock可以設置不同線程之間的依賴關系,讓滿足條件值的線程先執行,不滿足條件的線程處於等待狀態。

旗語叫“旗語”。信號量的初始值可以用來控制線程並發訪問的最大數量。信號量的初始值是1,也就是說同壹時間只允許1個線程訪問資源,保證線程同步。

@synchronized是互斥遞歸鎖的封裝。見源代碼:objc4中的文件objc-sync.mm,在@synchronized(obj)內部會生成obj對應的遞歸鎖,然後執行鎖和解鎖操作。

從高到低排序性能

調度_障礙_異步

Dispatch_barrier_async也叫柵欄函數。這個函數傳入的並發隊列必須通過dispatch _ queue _ crete自己創建。如果傳入壹個串行或全局並發隊列,這個函數相當於dispatch_async函數的效果。使用fence函數可以保證同壹時間只有壹個線程可以寫,有多少線程可以讀。