資源共享
1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源
比如多個執行緒訪問同乙個物件、同乙個變數、同乙個檔案
當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題
示例一:
示例二:
問題**:
#import "viewcontroller.h"
@inte***ce viewcontroller ()
/** 剩餘票數 */
@property (nonatomic, assign) nsinteger leftticketscount;
@property (nonatomic, strong) nsthread *thread1;
@property (nonatomic, strong) nsthread *thread2;
@property (nonatomic, strong) nsthread *thread3;
@end
@implementation viewcontroller
- (void)viewdidload
// 售票
- (void)selltickets
else
}}// 當手指觸控螢幕時,開啟執行緒
- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event
@end
列印結果:
互斥鎖使用格式
@synchronized(鎖物件)
注意:鎖定1份**只用1把鎖,用多把鎖是無效的
**示例:
#import "viewcontroller.h"
@inte***ce viewcontroller ()
/** 剩餘票數 */
@property (nonatomic, assign) nsinteger leftticketscount;
@property (nonatomic, strong) nsthread *thread1;
@property (nonatomic, strong) nsthread *thread2;
@property (nonatomic, strong) nsthread *thread3;
@end
@implementation viewcontroller
- (void)viewdidload
// 售票
- (void)selltickets
else}}
}// 當手指觸控螢幕時,開啟執行緒
- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event
@end
執行效果圖
互斥鎖的優缺點
優點:能有效防止因多執行緒搶奪資源造成的資料安全問題
缺點:需要消耗大量的cpu資源
互斥鎖的使用前提:多條執行緒搶奪同一塊資源
執行緒同步,多條執行緒按順序地執行任務
互斥鎖,就是使用了執行緒同步技術
oc在定義屬性時有nonatomic和atomic兩種選擇
atomic:原子屬性,為setter方法加鎖(預設就是atomic)
nonatomic:非原子屬性,不會為setter方法加鎖
atomic加鎖原理
@property (atomic, assign) nsstring *name;
- (void)setname:(nsstring *)name
}
原子和非原子屬性的選擇
nonatomic和
atomic對比
atomic:執行緒安全,需要消耗大量的資源
nonatomic:非執行緒安全,適合記憶體小的移動裝置
ios開發的建議
所有屬性都宣告為
nonatomic
盡量避免多執行緒搶奪同一塊資源
盡量將加鎖、資源搶奪的業務邏輯交給伺服器端處理,減小移動客戶端的壓力
iOS開發多執行緒篇 執行緒安全
一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安全4 5 6 7 89 10 im...
iOS開發多執行緒篇 執行緒安全
ios開發多執行緒篇 執行緒安全 一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安...
iOS開發多執行緒篇 執行緒安全
一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安全4 5 6 7 89 10 im...