NSRecursiveLock递归锁

作者: CGPointZero | 来源:发表于2015-12-18 09:53 被阅读1370次

递归锁,它允许同一线程多次加锁,而不会造成死锁。以下的代码如果用NSLock就会造成死锁:
<code>
//普通线程锁
NSLock *lock = [[NSLock alloc] init];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
static void (^block)(int);
block = ^(int value) {
//加锁
[lock lock];
if (value > 0) {
NSLog(@"%d",value);
sleep(2);
//递归调用
block(--value);
}
//解锁
[lock unlock];
};
//调用代码块
block(10);
});</code>

以上代码,会导致崩溃,出错信息:

<code>*** -[NSLock lock]: deadlock ( '(null)') *** Break on _NSLockError() to debug.</code>

这种情况下,需要改用NSRecursiveLock递归锁。
<code>
//递归锁
NSRecursiveLock *lock = [[NSRecursiveLock alloc] init];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
static void (^block)(int);
block = ^(int value) {
//加锁
[lock lock];
if (value > 0) {
NSLog(@"%d",value);
sleep(2);
//递归调用
block(--value);
}
//解锁
[lock unlock];
};
//调用代码块
block(10);
});</code>

相关文章

  • iOS中锁的种类

    NSRecursiveLock递归锁NSRecursiveLock实际上定义的是一个递归锁,这个锁可以被同一线程多...

  • 013-iOS锁机制

    锁的类别 NSLockingNSLockNSConditionLock 条件锁NSRecursiveLock 递归...

  • 线程锁

    iOS中有几种线程锁:@synchronized、NSLock以及NSRecursiveLock(递归锁)。本文用...

  • NSRecursiveLock递归锁

    递归锁,它允许同一线程多次加锁,而不会造成死锁。以下的代码如果用NSLock就会造成死锁: //普通线程锁NSLo...

  • Swift - 锁

    NSLock NSRecursiveLock 递归锁 当发生自己调用自己的时候,或者递归的时候,需要使用递归锁NS...

  • iOS -锁-NSRecursiveLock

    NSRecursiveLock,递归锁,顾名思义,执行递归操作的时候使用的锁。是互斥锁中的递归锁,可被同一线程多次...

  • 线程锁

    @synchronized 是递归锁,类似NSRecursiveLock,递归调用不会引起死锁,而NSLock是非...

  • 递归锁 NSRecursiveLock -trylock

    关于 NSRecursiveLock trylock 认知版本 错误的认知: 1.0 以为 trylock 是...

  • 多线程 — 锁

    互斥锁 NSLock 加锁之后在解锁之前,资源独占其他人不能访问 递归锁 NSRecursiveLock 同一线程...

  • iOS锁系列-NSRecursiveLock递归锁

    原文,此文只为总结学习使用NSRecursiveLock实际上定义的是一个递归锁,这个锁可以被同一线程多次请求,而...

网友评论

  • Caohr:楼主如果“--”放在value之后的话,那么value的值一直都会是10,“--”应该放在value之前这样value才有可能变为0.
    CGPointZero:@Caohr 嗯,感谢反馈,是的,先调了block(10),再--,每次到block(value--)的时候,value都是10,已经更新成block(--value)了。感谢反馈!
  • FengxinLi:请问一下楼主, @synchronized(self) {}和加锁是一样的效果吗?
    CGPointZero:@Fengxinliju en

本文标题:NSRecursiveLock递归锁

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