6

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

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

一位开发人员提到这在某种程度上是可能的。我将如何创建这样一个始终串行的队列?

4

2 回答 2

9

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

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

于 2012-08-15T12:20:39.110 回答
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);

于 2015-05-24T16:27:11.883 回答