Objective-c 线程系列三 NSRecursiveLock

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容