探討iOS開發(fā)中各種鎖
使用NSCondition實現(xiàn)多線程同步
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSLog(@"--");
dispatch_async(dispatch_get_global_queue(0, 0), ^{
sleep(2);
[_cityCondition lock];
[_cityCondition signal];
[_cityCondition unlock];
});
NSLog(@"%d", [self ff]);
NSLog(@"====");
return YES;
}
- (BOOL)ff {
if (!_cityCondition) {
_cityCondition = [[NSCondition alloc] init];
}
[_cityCondition lock];
[_cityCondition wait];
[_cityCondition unlock];
return 1;
}
NSCondition是線程同步,
[_cityCondition lock];
[_cityCondition wait];
[_cityCondition unlock];
阻塞線程亏推。
[_cityCondition lock];
[_cityCondition signal];
[_cityCondition unlock];
取消阻塞線程.
所以要求阻塞線程是在自線程中進行颜懊,解鎖可以放在主線程或者是其他子線程中。