假设我在并发队列中虚拟调用dispatch_sync——它会阻止整个队列还是只是执行线程?
dispatch_sync会阻塞调用线程,直到执行完成,一个并发队列有多个线程,因此它只会阻塞该队列上的其中一个线程,其他线程仍将执行。
以下是苹果公司对此的解释:
将块提交到调度队列以同步执行。与dispatch_async不同,此函数在块完成之前不返回。在调用此函数并针对当前队列时会导致死锁。
与dispatch_async不同,在目标队列上不执行保留操作。因为对这个函数的调用是同步的,所以它“借用”了调用者的引用。此外,不会对块执行Block_copy。
作为一种优化,此函数在可能的情况下在当前线程上调用块。