从并发队列调用dispatch_sync - 它是否完全阻塞?

时间:2015-06-15 04:27:45

标签: ios objective-c multithreading swift grand-central-dispatch

假设我假设从并发队列调用dispatch_sync - 它是阻止整个队列还是仅阻止执行的线程?

1 个答案:

答案 0 :(得分:4)

dispatch_sync将阻塞调用程序线程,直到执行完成,并发队列有多个线程,因此它只会阻塞该队列中的一个,其他线程仍将执行。

以下是Apple对此的评论:

  

将一个块提交到调度队列以进行同步执行。不像   dispatch_async,此函数在块有效之前不会返回   完了。调用此函数并定位当前队列   导致陷入僵局。

     

与dispatch_async不同,不对目标执行保留   队列。因为对此函数的调用是同步的,所以它“借用”   来电者的参考。而且,没有执行Block_copy   块。

     

作为优化,此函数调用当前的块   尽可能的线程。

Source