iOS 产生死锁的原因及解决办法

死锁

1、定义:

所谓死锁,通常指有两个线程T1和T2都卡住了,并等待对方完成某些操作。T1不能完成是因为它在等待T2完成。但T2也不能完成,因为它在等待T1完成。于是大家都完不成,就导致了死锁(DeadLock)。

下面是产生死锁简单的代码

//dispatch_sync需要等block执行完,而block加在主队列中,此时的主线程是堵塞,所以形成死锁
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"这里死锁了");
});

解决办法
//把block放到别的线程中
dispatch_sync(dispatch_get_global_queue(), ^{
NSLog(@"这里死锁了");
});
//异步调用block
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"这里死锁了");
});

你可能感兴趣的:(iOS 产生死锁的原因及解决办法)