据我了解非主队列 GCD 队列,默认情况下它们仅在具有单核 CPU 的设备上是串行的。但是如果一个设备有多个内核,队列中的块可能会同时执行。
我想使用串行 GCD 队列来克服一些并发问题,即使有多个内核,这个队列也必须是串行的。
一位开发人员提到这在某种程度上是可能的。我将如何创建这样一个始终串行的队列?
据我了解非主队列 GCD 队列,默认情况下它们仅在具有单核 CPU 的设备上是串行的。但是如果一个设备有多个内核,队列中的块可能会同时执行。
我想使用串行 GCD 队列来克服一些并发问题,即使有多个内核,这个队列也必须是串行的。
一位开发人员提到这在某种程度上是可能的。我将如何创建这样一个始终串行的队列?
可以通过dispatch_get_global_queue
函数获取的标准 GCD 队列确实是并发的。
但是您可以使用dispatch_queue_create函数创建自定义 gcd 队列。DISPATCH_QUEUE_SERIAL
作为第二个参数传递以将该队列创建为串行。
创建并发队列:
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);