dispatch_sync
死锁?1.一个线程仅包含一个队列吗?
关系是一种方式。串行队列可以容纳一个线程来执行分配给它的块,但是线程不知道队列。好吧,主线程很特殊,它知道主队列。
我猜
调度队列并不指示它将在哪个线程上运行块或函数,我认为调度队列管理着一个包含许多线程的线程池,当调度一个块时它将获取一个空闲线程。因此,一个线程可以在一段时间内为许多调度队列工作。
但是可以肯定的是:当您将一个块分派到队列中时,该块在其上运行的线程可以为一个确定的分派队列工作,您可以使用来获取它dispatch_get_current_queue
。
2.如果我异步地将一个块分配给globalQueue,它是否可以在主线程上运行?
我认为它不会在主线程上对globalQueue运行任何块,因为它无法评估该块的执行时间,如果是长时间的工作,它将阻塞主线程。
3.哪种情况会导致dispatch_sync死锁?
我引用了 Concurrency programming guide
您永远不要从正在计划传递给该函数的队列中执行的任务中调用dispatch_sync或dispatch_sync_f函数。这对于保证死锁的串行队列特别重要,但对于并发队列也应避免。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句