假设我假设从并发队列调用dispatch_sync - 它是阻止整个队列还是仅阻止执行的线程?
答案 0 :(得分:4)
dispatch_sync将阻塞调用程序线程,直到执行完成,并发队列有多个线程,因此它只会阻塞该队列中的一个,其他线程仍将执行。
以下是Apple对此的评论:
将一个块提交到调度队列以进行同步执行。不像 dispatch_async,此函数在块有效之前不会返回 完了。调用此函数并定位当前队列 导致陷入僵局。
与dispatch_async不同,不对目标执行保留 队列。因为对此函数的调用是同步的,所以它“借用” 来电者的参考。而且,没有执行Block_copy 块。
作为优化,此函数调用当前的块 尽可能的线程。