ios開發多執行緒篇—執行緒安全
一、多執行緒的安全隱患
資源共享
1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源
比如多個執行緒訪問同乙個物件、同乙個變數、同乙個檔案
當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題
示例一:
示例二:
問題**:
1//2列印結果:05-執行緒安全4//
5//6//
7//89
10#import
"yyviewcontroller.h"11
12@inte***ce
yyviewcontroller ()
13//
剩餘票數
1415 @property(nonatomic,assign) int
leftticketscount;
16 @property(nonatomic,strong)nsthread *thread1;
17 @property(nonatomic,strong)nsthread *thread2;
18 @property(nonatomic,strong)nsthread *thread3;
1920
21@end
2223
24@implementation
yyviewcontroller
2526
27 - (void
)viewdidload
2848
4950 -(void
)selltickets
51else
6670}71
}727374 -(void)touchesbegan:(nsset *)touches withevent:(uievent *)event
7583
84@end
二、安全隱患分析
三、如何解決
互斥鎖使用格式
@synchronized(鎖物件)
注意:鎖定1份**只用1把鎖,用多把鎖是無效的
**示例:
1//2執行效果圖05-執行緒安全4//
5//6//
7//89
#import
"yyviewcontroller.h"10
11@inte***ce
yyviewcontroller ()
1213
//剩餘票數
14 @property(nonatomic,assign) int
leftticketscount;
15 @property(nonatomic,strong)nsthread *thread1;
16 @property(nonatomic,strong)nsthread *thread2;
17 @property(nonatomic,strong)nsthread *thread3;
18@end
1920
@implementation
yyviewcontroller
2122 - (void
)viewdidload
2341
4243 -(void
)selltickets
44else
6165}66
}67}68
6970 -(void)touchesbegan:(nsset *)touches withevent:(uievent *)event
7178
79@end
互斥鎖的優缺點
優點:能有效防止因多執行緒搶奪資源造成的資料安全問題
缺點:需要消耗大量的cpu資源
互斥鎖的使用前提:多條執行緒搶奪同一塊資源
相關專業術語:執行緒同步,
多條執行緒按順序地執行任務
互斥鎖,就是使用了執行緒同步技術
四:原子和非原子屬性
oc在定義屬性時有nonatomic和atomic兩種選擇
atomic:原子屬性,為setter方法加鎖(預設就是atomic)
nonatomic:非原子屬性,不會為setter方法加鎖
atomic加鎖原理
1 @property (assign, atomic) int原子和非原子屬性的選擇age;
23 - (void)setage:(int
)age
49 }
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...