Tag: 僵局

澄清dispatch_queue,重入和死锁

我需要澄清dispatch_queue是如何与重入和死锁有关的。 阅读这篇博客文章, 在iOS / OS X上的线程安全基础知识 ,我遇到了这样一句话: 所有分派队列都是不可重入的,这意味着如果您尝试在当前队列上分派同步,则会发生死锁。 那么,重入和僵局之间的关系是什么呢? 为什么,如果一个dispatch_queue是不可重入的,当你使用dispatch_sync调用时会产生死锁? 在我的理解中,只有当你正在运行的线程与调度块所在的线程相同时,才可以使用dispatch_sync产生死锁。 一个简单的例子如下。 如果我在主线程中运行代码,由于dispatch_get_main_queue()也会占用主线程,所以我将以死锁结束。 dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"Deadlock!!!"); }); 任何澄清?