sync
我知道如果你从同一个串行队列上的另一个调度调用一个调度,就会发生死锁sync
,但这是我听说过的 GCD 死锁的唯一“已知”原因。
我正在使用全局并发队列,所以我希望sync
请求不会导致死锁。我有这段代码,它正在使用ASIHTTPRequest
:
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[self.networkQueue cancelAllOperations];
self.networkQueue=nil;
self.networkQueue=[ASINetworkQueue queue];
});
我们的想法是尝试加速该cancelAllOperations
部分,因为如果您在networkQueue
.
但是当我调用这段代码时,就会出现死锁。如果我从 GCD 中取出这个块并在主线程上运行它,运行时会有延迟cancelAllOperations
,但它确实完成而没有死锁。然而,当在这个 dispatch 内部时,应用程序会冻结,iOS 最终会终止应用程序。
任何帮助表示赞赏。