首页 文章

派遣到并发队列导致在主线程上执行?

提问于
浏览
1

Apple的GCD文档声明如下:

GCD提供并管理应用程序可以以块对象的形式提交任务的FIFO队列 . 提交到调度队列的块在完全由系统管理的线程池上执行 . 不保证任务执行的线程 . GCD提供三种队列:

这是否意味着即使我发出了诸如此类的请求

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{...});

它可能导致在主线程上执行代码块?在这种情况下,似乎在主线程上使用并发队列调用dispatch_sync可能会导致主线程卡在等待自身的死锁情况 .

我对GCD文件的解释是否正确?

2 回答

  • 1

    是的,似乎dispatch_sync到全局队列可能意味着如果调用者在主线程上,则在主线程上执行代码 . dispatch_sync的文档说明:

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

    dispatch_sync always scheduling a block on Main Thread

  • 0

    由于dispatch_sync等待块完成,因此无论块是在并发线程还是主线程上执行都没有多大区别;无论如何,主线程被阻止了 .

    因此,从主线程调用dispatch_sync会有效地阻塞主线程直到块完成,因此除非块仅在短时间内执行,否则这是一个坏主意 .

相关问题