ios-UI高階 多執行緒的互斥解決
· 啟動執行緒
- (void)start;
· 阻塞執行緒
+ (void)sleepUntilDate:(NSDate *)date;
- (void)sleepForTimeInterval:(NSTimeInterval *)interval;
· 強制停止執行緒
+ (void)exit;
注:一旦執行緒停止(死亡)了,就不能再次開啟任務。
2、多執行緒的安全隱患
· 資源共享
一塊資源可能會被多個執行緒共享,即多個執行緒可能訪問同一塊資源;比如多個執行緒同時訪問一個物件,這樣就存在安全隱患
3、安全隱患的解決方法--互斥鎖
· 互斥鎖使用格式
@synchronized(鎖物件) {
// 需要鎖定的程式碼
}
注意:鎖定一份程式碼的鎖必須是同一把鎖才能達到目的
互斥鎖的優缺點:
優點:能有效防止因多執行緒搶奪資源造成的資料安全問題
缺點:需要消耗大量的CPU資源
互斥鎖的使用前提是:多條執行緒同時訪問同一資源
互斥鎖也稱執行緒同步:即多條執行緒在同一條線上執行(按順序的執行任務)
ViewController.m檔案中:
@interface ViewController ()
// 建立4個程式
@property(nonatomic,strong) NSThread *thread1;
@property(nonatomic,strong) NSThread *thread2;
@property(nonatomic,strong) NSThread *thread3;
@property(nonatomic,strong) NSThread *thread4;
@property(nonatomic,assign) NSInteger moneyValue;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//初始化程式
self.thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(takeMoney) object:nil];
self.thread1.name = @"路人1";
self.thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(takeMoney) object:nil];
self.thread2.name = @"路人2";
self.thread3 = [[NSThread alloc] initWithTarget:self selector:@selector(takeMoney) object:nil];
self.thread3.name = @"路人3";
self.thread4 = [[NSThread alloc] initWithTarget:self selector:@selector(takeMoney) object:nil];
self.thread4.name = @"路人4";
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// 啟動程式
[self.thread1 start];
[self.thread2 start];
[self.thread3 start];
[self.thread4 start];
}
-(void)takeMoney{
self.moneyValue = 6000;
while (1) {
//互斥鎖
@synchronized(self) {
if (self.moneyValue > 0) {
NSInteger value = self.moneyValue;
self.moneyValue = value - 200;
NSLog(@"%@取錢後,取款機還剩下%ld元",[NSThread currentThread].name,self.moneyValue);
}else {
NSLog(@"取款機沒有餘額了");
break;
}
}
}
}
相關文章
- ios-UI高階多執行緒 GCD實現單例模式iOSUI執行緒GC單例模式
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- windows多執行緒同步--互斥量Windows執行緒
- 多執行緒高併發解決辦法執行緒
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- Java 高階 --- 多執行緒快速入門Java執行緒
- windows多執行緒同步互斥--總結Windows執行緒
- 執行緒的互斥鎖執行緒
- Linux多執行緒的使用一:互斥鎖Linux執行緒
- 執行緒同步與互斥:互斥鎖執行緒
- 畫江湖之 PHP 多執行緒開發 【執行緒安全 互斥鎖】PHP執行緒
- 畫江湖之 PHP 多執行緒開發 [執行緒安全 互斥鎖]PHP執行緒
- python多執行緒程式設計3: 使用互斥鎖同步執行緒Python執行緒程式設計
- C#多執行緒學習(六) 互斥物件C#執行緒物件
- C# 多執行緒學習(6) :互斥物件C#執行緒物件
- Java高階-解析Java中的多執行緒機制(轉)Java執行緒
- 《Java 高階篇》七:執行緒和執行緒池Java執行緒
- linux程式多執行緒互斥鎖的簡單使用Linux執行緒
- 多執行緒併發執行及解決方法執行緒
- 進階Java多執行緒Java執行緒
- 多執行緒與高併發(一)多執行緒入門執行緒
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- 【java 多執行緒】多執行緒併發同步問題及解決方法Java執行緒
- JavaEE進階知識學習----多執行緒JUC高階知識-5-執行緒池-Callable-執行緒排程Java執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- JUC執行緒高階---執行緒控制通訊Condition執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- Java進階05 多執行緒Java執行緒
- [shell進階]——shell多執行緒執行緒
- 多執行緒的安全問題及解決方案執行緒
- 淺析Java多執行緒程式設計中的高階技術Java執行緒程式設計
- 詳解多執行緒執行緒
- 多執行緒詳解執行緒
- Linux之執行緒互斥鎖Linux執行緒
- Python 執行緒同步與互斥Python執行緒
- 多執行緒03:?執行緒傳參詳解執行緒
- 多執行緒-執行緒生命週期圖解執行緒圖解
- Java高併發與多執行緒(二)-----執行緒的實現方式Java執行緒