@synchronized和NSLock产生死锁场景

 /** A锁 */
     static NSString* A = @"A";
    
    /** B锁 */
     static NSString* B = @"B";
    dispatch_async(queue, ^{
          //  NSLog(@"%@",[self sourceOut]) ;
        @synchronized(A){
            NSLog(@"锁A0");
            sleep(2);
            @synchronized(B){
                NSLog(@"锁B0");
            }
        }
        });
    
    dispatch_async(queue, ^{
        @synchronized(B){
            NSLog(@"锁B1");
           
            @synchronized(A){
                NSLog(@"锁A1");
            }
        }
    });
打印:2018-04-06 15:35:56.206903+0800 COCOCOCO[13309:566143] 锁A0
2018-04-06 15:35:56.206939+0800 COCOCOCO[13309:566145] 锁B1
NSLock:
  [self.lock lock];
  [self.lock lock];//由于当前线程加锁,现在再次加同样的锁,需等待当前线程解锁,把当前线程挂起,不能解锁
  [_lock unlock];
  [_lock unlock];

另附两篇博客:https://blog.csdn.net/hopedark/article/details/49640939

                     http://www.cocoachina.com/ios/20161205/18279.html

猜你喜欢

转载自blog.csdn.net/HuberCui/article/details/79833985
今日推荐