Tag: 目标 阻止

如何在没有死锁的情况下同步调度主队列?

我需要在主队列上同步分派一个块。 我不知道我目前是在主线程还是不在线。 天真的解决scheme如下所示: dispatch_sync(dispatch_get_main_queue(), block); 但是,如果我目前在主队列中运行一个块,这个调用会造成死锁。 (同步调度等待块完成,但块甚至不开始运行,因为我们正在等待当前的块完成。) 明显的下一步是检查当前队列: if (dispatch_get_current_queue() == dispatch_get_main_queue()) { block(); } else { dispatch_sync(dispatch_get_main_queue(), block); } 这工作,但它是丑陋的。 在我至less把它隐藏在一些自定义函数之前,是不是有更好的解决这个问题的办法? 我强调,我不能asynchronous调度块 – 应用程序处于asynchronous调度块“执行太迟”的情况。