NSLocking 有两个方法
// 上锁
- (void)lock;
// 解锁
- (void)unlock;
实现协议的对象都具有 上锁和解锁功能,NSLock,NSConditionLock,NSRecursiveLock,NSCondition
NSLock
在多线程开发的环境下,多个线程运作的时候NSLock 就会显得特别重要!
NSLock 就是锁定,解锁。
NSLock * lock = [[NSLock alloc]init];
NSMutableArray * piaos = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3"]];
// 线程1
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[lock lock];
NSString * st = piaos[0];
NSLog(@"++%@",st);
sleep(3);
[piaos removeObject:@"1"];
[lock unlock];
});
// 线程2
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"xxoo");
});
// 线程3
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[lock lock];
NSLog(@"%@",piaos);
[lock unlock];
});
上面有3个线程 其中有两个线程加锁。一个没加锁,运行以后你会发现
2015-12-25 17:21:01.770 Nsthirth[3385:2053566] ++1
2015-12-25 17:21:01.770 Nsthirth[3385:2053468] xxoo
2015-12-25 17:21:04.771 Nsthirth[3385:2053471] (
2,
3
)
线程2 开线程以后就开始跑了6666,线程1 和3 加了锁 线程1先一步锁定,线程3就需要等待3S 才执行
这里要说点小主意NSLock 加锁的时紧跟着lock 后免得语句
di