美文网首页
Objective-c 线程系列三 NSRecursiveLo

Objective-c 线程系列三 NSRecursiveLo

作者: 海森V | 来源:发表于2018-07-03 16:37 被阅读41次

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,锁的释放过程也是同理

相关文章

网友评论

      本文标题:Objective-c 线程系列三 NSRecursiveLo

      本文链接:https://www.haomeiwen.com/subject/xuxjuftx.html