參考文檔中一共提到8種鎖儒陨,講解的很詳細(xì)雳灾。后續(xù)可以抽空繼續(xù)學(xué)習(xí)顶别。暫且就其中的兩種鎖作一簡單記錄:
NSLock:
//主線程中
NSLock *lock = [[NSLock alloc] init];
//線程1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[lock lock];
NSLog(@"線程1");
sleep(2);
NSLog(@"線程1解鎖成功");
[lock unlock];
});
//線程2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[lock lock];
NSLog(@"線程2");
sleep(1);
NSLog(@"線程2解鎖成功");
[lock unlock];
});
NSConditionLock
//主線程中
NSConditionLock *lock = [[NSConditionLock alloc] initWithCondition:0];
//線程1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[lock lockWhenCondition:4];
NSLog(@"線程1");
sleep(2);
[lock unlockWithCondition:5];
});
//線程2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[lock lockWhenCondition:0];
NSLog(@"線程2");
sleep(3);
NSLog(@"線程2解鎖成功");
[lock unlockWithCondition:2];
});
//線程3
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[lock lockWhenCondition:2];
NSLog(@"線程3");
sleep(3);
NSLog(@"線程3解鎖成功");
[lock unlockWithCondition:3];
});
//線程4
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[lock lockWhenCondition:3];
NSLog(@"線程4");
sleep(2);
NSLog(@"線程4解鎖成功");
[lock unlockWithCondition:4];
});
鎖是一種常用的同步工具审编。從代碼的角度講就是加鎖時剪决,同一時刻只能有一個鎖內(nèi)代碼執(zhí)行拗胜。也可以用來做添加線程依賴蔗候。但實(shí)測,在網(wǎng)絡(luò)請求的線程處理時還是得細(xì)心處理埂软。