如何创建一个总是串行的GCD队列,即使在多核CPU上也是如此?

Int*_*rog 6 iphone concurrency grand-central-dispatch ipad ios

据我所知,非主队列GCD队列,默认情况下,它们仅在具有单核CPU的设备上串行.但是,如果设备具有多个内核,则可能会发生队列中的块同时执行.

我想使用串行GCD队列来克服一些并发问题,即使有多个内核,这个队列也必须是串行的.

开发人员提到这是可能的.我如何创建这样一个始终串行的队列?

Vla*_*mir 9

可以通过dispatch_get_global_queue函数获得的标准GCD队列确实是并发的.

但您可以使用dispatch_queue_create函数创建自定义gcd队列.DISPATCH_QUEUE_SERIAL作为第二个参数传递以将该队列创建为串行.

  • @InternationalFrog - 是的,无论核心数量如何,使用`dispatch_queue_create()`创建的串行队列都可以保证串行执行.它们中的块可以在不同的线程上运行,但它们总是一次执行一个.我使用它来在几个地方围绕共享资源进行廉价锁定. (3认同)
  • 随机注释:serial是默认值,所以你可以使用`NULL`代替`DISPATCH_QUEUE_SERIAL` ......同样相同. (2认同)

Tai*_* Le 7

要创建并发队列:
dispatch_queue_t concurrentQueue = dispatch_queue_create("com.aj.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);

要创建串行队列:
dispatch_queue_t serialQueue = dispatch_queue_create("com.aj.serial.queue", DISPATCH_QUEUE_SERIAL);