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

2021-07-07 10:30:42 字數 2516 閱讀 5706

資源共享

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...