當前位置:編程學習大全網 - 源碼下載 - IOS多線程安全(線程鎖)

IOS多線程安全(線程鎖)

線程的不安全是由於多線程訪問和修改***享資源而引起的不可預測的結果。

ios多線程開發中為保證線程的安全常用到的幾種鎖: NSLock dispatch_semaphore NSCondition NSRecursiveLock @synchronized

WEAKSELF typeof(self) __weak weakSelf = self;

NSLock 是OC層封裝底層線程操作來實現的壹種鎖,繼承NSLocking協議。不能叠代加鎖,如果發生兩次lock,而未unlock過,則會產生死鎖問題。

以車站購票為例,多個窗口同時售票(同步),每個窗口有人循環購票:

原子操作

原子操作是指不可打斷的操作,也就是說線程在執行操作的過程中,不會被操作系統掛起,而是壹定會執行完,

變量屬性Property中的原子定義

壹般我們定義壹個變量@property (nonatomic ,strong)NSLock *lock;nonatomic:非原子性,不會為setter方法加鎖,適合內存小的移動設備;atomic:原子性,默認為setter方法加鎖(默認就是atomic),線程安全。

PS: 在iOS開發過程中,壹般都將屬性聲明為nonatomic,盡量避免多線程搶奪同壹資源,盡量將加鎖等資源搶奪業務交給服務器。

NSCondition常用於生產者-消費者模式,它繼承了NSLocking協議,同樣有lock和unlock方法。條件變量有點像信號量,提供了線程阻塞和信號機制,因此可以用來阻塞某個線程,並等待數據就緒再喚醒程序。

信號量主要有3個函數,分別是:

註意: 正常的使用順序是先降低然後提高,這兩個函數通常都是成對出現。

本文主要參考了這篇文章( blogs.com/crash-wu/p/4806499.html

),並對其中所能理解的部分進行壹壹驗證,以前沒怎麽寫過類似的,如果有什麽做的不好的地方還請大家多多見諒!

  • 上一篇:現在流行的dsp型號有哪些
  • 下一篇:最簡單的話概括含小數的值的原碼,反碼,補碼如何表達?
  • copyright 2024編程學習大全網