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

时间:2012-08-15 12:15:37

标签: iphone ios ipad concurrency grand-central-dispatch

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

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

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

2 个答案:

答案 0 :(得分:9)

可以使用dispatch_get_global_queue函数获得的标准GCD队列确实是并发的。

但您可以使用 dispatch_queue_create 功能创建自定义gcd队列。将DISPATCH_QUEUE_SERIAL作为第二个参数传递,以将该队列创建为serial。

答案 1 :(得分: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);