iOS多線程

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更好的處理隊列。

  1. NSOpertion 是面向對象,可以封裝和繼承
  2. operation方便異步建立依賴,
  3. 方便最大的并發(fā)數(shù)量
  4. 符合kvo的屬性
  5. operation可以暫定 恢復 取消等操作
  6. 缺點是比CGD稍慢
  • Thread(最輕,靈活度高)
  • Cocoa Operation (隊列+操作對象)
  • Grand Central Dispatch(調度隊列+操作對象)
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容