【iOS开发】iOS开发中的死锁

参考文章:
彻底搞懂OC中GCD导致死锁的原因和解决方案

以下面的例子来做说明:

NSLog(@"1"); // 任务1
dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"2"); // 任务2
});
NSLog(@"3"); // 任务3

当执行到dispatch_sync的时候,由于是同步执行,所以,当前线程即主线程会被阻塞,直到block里面的代码被执行完,但是block里面的代码被放到了主线程中来执行,即当前被阻塞的线程来执行,所以,任务2不可能被执行。程序也就没有办法再继续向下走。

我觉得这才是正确的解释,而不是这篇文章中的解释

首先执行任务1,这是肯定没问题的,只是接下来,程序遇到了同步线程,那么它会进入等待,等待任务2执行完,然后执行任务3。但这是队列,有任务来,当然会将任务加到队尾,然后遵循FIFO原则执行任务。那么,现在任务2就会被加到最后,任务3排在了任务2前面。

让我想了好久才想明白。

你可能感兴趣的:(【iOS开发】iOS开发中的死锁)