【发布时间】:2017-02-03 23:22:42
【问题描述】:
我是一名 Android 工程师,试图移植一些使用 5 个串行调度队列的 iOS 代码。我想确保我以正确的方式思考问题。
-
dispatch_sync 到 SERIAL 队列基本上是将队列用作同步队列 - 只有一个线程可以访问它,并且可以将执行的块视为关键区域。它立即发生在当前线程上——相当于
get_semaphore() queue.pop() do_block() release_semaphore() dispatch_async 到串行队列 - 在另一个线程上执行块并让当前线程立即返回。然而,由于它是一个串行队列,它保证一次只会执行其中一个异步线程(对 dispatch_async 的下一次调用将等到所有其他线程完成)。该块也可以被认为是一个关键区域,但它会发生在另一个线程上。所以与上面的代码相同,但它首先传递给工作线程。
我是不是搞错了,还是我猜对了?
【问题讨论】:
标签: ios multithreading ios-multithreading