iOS開發多執行緒篇 執行緒安全

2021-06-29 04:04:01 字數 2920 閱讀 6928

一、多執行緒的安全隱患

資源共享

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開發多執行緒篇 執行緒安全

ios開發多執行緒篇 執行緒安全 一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安...

iOS開發多執行緒篇 執行緒安全

一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安全4 5 6 7 89 10 im...

iOS開發多執行緒篇 執行緒安全

ios開發多執行緒篇 執行緒安全 一 多執行緒的安全隱患 資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案 當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 示例一 示例二 問題 1 2 05 執行緒安...