ios - 在 iOS 中调度并发队列

标签 ios cocoa concurrency grand-central-dispatch

当它们被放在一个并发队列中(虽然我理解这个概念!)。

我的 iOS 框架中有一个自定义并发队列。因此,如果按以下顺序插入 block ,例如:

CustomConcurrentQueue ->

  1. dispacth_sync block
  2. dispatch_barrier_sync block
  3. dispatch_async block
  4. dispatch_async_barrier block
  5. dispatch_sync_barrier block
  6. dispatch_sync block.

执行顺序是什么。谁能给我解释清楚吗?谢谢。

最佳答案

我估计他们会按照这个顺序执行(即开始然后完成)。

既然你知道开始顺序,我假设它们都是从同一个队列(可能是主队列?)调用的。

  1. 调度同步。运行。在此返回之前不会开始第 2 步。
  2. dispatch_barrier_sync。等待任何先前的 block 完成(但没有)。运行。此 block 完成之前不会开始第 3 步。
  3. dispatch_async。开始。
  4. dispatch_barrier_async。等待步骤 3 中的 block 完成,然后开始。
  5. dispatch_barrier_sync。等待步骤 4 中的 block 完成,然后运行。在此完成之前不会开始第 6 步。
  6. 调度同步。运行。程序仅在返回时继续。

关于ios - 在 iOS 中调度并发队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21848764/

相关文章:

ios - 什么库包含通过 IOConnectCallMethod 调用的内核代码

objective-c - 如何居中 NSSegmentedControl

concurrency - 为什么无锁并发如此重要(在 Clojure 中)?

c# struct array 的并发性

ios - 从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext

iphone - iPhone 地址簿中自定义标签的最大数量?

xml - 解析大型 PLIST 和内存占用

cocoa - 层托管 NSView 的调整大小问题

postgresql - 锁定 SELECT,这样另一个进程就不会获取旧数据

ios - 使用 Twilio 无法通过麦克风听到声音