/** 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