Objective-c 线程系列一 atomic是安全的吗
Objective-c 线程系列二 @synchronized
Objective-c 线程系列三 NSRecursiveLock
一 苹果开发者文档
二 苹果开发者文档译文
可以由同一个线程多次获取但不会造成死锁
三 发生死锁的测试代码
NSLock *lock = [[NSLock alloc] init];
[lock lock];
[lock lock];
NSLog(@"发生了死锁");
[lock unlock];
[lock unlock];
四 改成NSRecursiveLock
NSRecursiveLock *lock = [[NSRecursiveLock alloc] init];
[lock lock];
[lock lock];
NSLog(@"没有死锁");
[lock unlock];
[lock unlock];
五 原理解读
递归锁是通过pthread_mutex_lock函数来实现,在函数内部会判断锁的类型,如果显示是递归锁,就允许递归调用,将一个计数器加1,锁的释放过程也是同理
网友评论