多線程的安全隱患

  • 資源共享
  1. 1塊資源可能會被多個線程共享,也就是多個線程可能會訪問同一塊資源
  2. 好比多個線程訪問同一個對象、同一個變量、同一個文件

 

  • 當多個線程訪問同一塊資源時,很容易引起數據錯亂和數據安全問題

安全隱患分析:

安全隱患的解決——互斥鎖:

  • 互斥鎖使用格式
@synchronized(鎖對象) { // 須要鎖定的代碼  }

注意:鎖定1份代碼只用1把鎖,用多把鎖是無效的安全

 

互斥鎖的優缺點:

  • 優勢:能有效防止因多線程搶奪資源形成的數據安全問題
  • 缺點:須要消耗大量的CPU資源
 
互斥鎖的使用前提: 多條線程搶奪同一塊資源
 
相關專業術語: 線程同步
線程同步的意思是:多條線程在同一條線上執行(按順序地執行任務)
互斥鎖,就是使用了線程同步技術
 

原子和非原子屬性:

  • OC在定義屬性時有nonatomicatomic兩種選擇
  1. atomic:原子屬性,爲setter方法加鎖(默認就是atomic
  2. nonatomic:非原子屬性,不會爲setter方法加鎖
  • nonatomicatomic對比
  1. atomic:線程安全,須要消耗大量的資源
  2. nonatomic:非線程安全,適合內存小的移動設備
 

iOS開發的建議

  • 全部屬性都聲明爲nonatomic
  • 儘可能避免多線程搶奪同一塊資源
  • 儘可能將加鎖、資源搶奪的業務邏輯交給服務器端處理,減少移動客戶端的壓力
相關文章
相關標籤/搜索