在GCD中,串行队列中的所有任务都保证在同一个线程中运行吗?

Boo*_*oon 6 objective-c grand-central-dispatch ios

在GCD中,串行队列(例如主队列)中的所有任务都保证在同一个线程中运行吗?

Aar*_*ger 6

对于串行队列一般,没有.从并发编程指南:

串行队列(也称为专用调度队列)按照将它们添加到队列的顺序一次执行一个任务.当前正在执行的任务由调度队列管理的不同线程(可能因任务而异)上运行.

具体来说,对于主队列,是:

主调度队列是一个全局可用的串行队列,它在应用程序的主线程上执行任务.[...]因为它在应用程序的主线程上运行,所以主队列通常用作应用程序的关键同步点.

  • 这意味着应用程序通常会同步主队列上的数据资源.例如,您可以拥有一个UIImage对象的NSMutableArray,它们是在后台队列中创建的,然后添加到主线程上的数组中.如果NSMutableArray的所有操作都在主线程上完成,则数组的同步点是主线程.如上所述,您还可以在专用串行队列上同步资源.但您应该只通过此队列访问此资源,除非您有其他锁定机制. (2认同)