从并发队列调用dispatch_sync-会完全阻塞吗?

3
假设我在并发队列中虚拟调用dispatch_sync——它会阻止整个队列还是只是执行线程?
1个回答

5

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

以下是苹果公司对此的解释:

将块提交到调度队列以同步执行。与dispatch_async不同,此函数在块完成之前不返回。在调用此函数并针对当前队列时会导致死锁。

与dispatch_async不同,在目标队列上不执行保留操作。因为对这个函数的调用是同步的,所以它“借用”了调用者的引用。此外,不会对块执行Block_copy。

作为一种优化,此函数在可能的情况下在当前线程上调用块。

来源


3
答案是:不会,因为并发队列由多个线程组成。 - Tommy
1
谢谢你发现了这个问题,Tommy。我误读了问题。我已经更新了我的答案。 - cjnevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接