iOS的鎖機制?都有哪些鎖?
相同點:
都能保證同一時間只有一個線程訪問共享資源。都能保證線程安全。
不同點:
互斥鎖:如果共享數(shù)據(jù)已經(jīng)有其他線程加鎖了,線程會進入休眠狀態(tài)等待鎖。一旦被訪問的資源被解鎖,則等待資源的線程會被喚醒。
自旋鎖:如果共享數(shù)據(jù)已經(jīng)有其他線程加鎖了,線程會以死循環(huán)的方式等待鎖,一旦被訪問的資源被解鎖,則等待資源的線程會立即執(zhí)行。
自旋鎖的效率高于互斥
互斥鎖:
NSLock
自旋鎖:
os_unfair_lock_t
信號量
let semaphore = DispatchSemaphore(value: 1)
semaohore.wait() 信號量減1
semaphore.signal() 信號量加1
當信號量的值為0的時候 當前線程會一直阻塞
自旋鎖:
GCD和NSOpertion的區(qū)別?
CGD是基于C的api ,NSoperation是基于GCD的封裝,是面向對象的,相比GCD,NSOperation,更好的處理隊列之間的依賴關系,缺點是比GCD稍慢
GCD更好處理任務,NSOperation更好的處理隊列。
- NSOpertion 是面向對象,可以封裝和繼承
- operation方便異步建立依賴,
- 方便最大的并發(fā)數(shù)量
- 符合kvo的屬性
- operation可以暫定 恢復 取消等操作
- 缺點是比CGD稍慢
- Thread(最輕,靈活度高)
- Cocoa Operation (隊列+操作對象)
- Grand Central Dispatch(調度隊列+操作對象)