objective-c objective-c-blocks grand-central-dispatch fifo

objective c - Cola serie FIFO utilizando GCD



objective-c objective-c-blocks (1)

Esta es una cola FIFO en GCD:

dispatch_queue_t serialQueue = dispatch_queue_create("com.blah.queue", DISPATCH_QUEUE_SERIAL); ... dispatch_async(serialQueue, ^{ //block1 }); dispatch_async(serialQueue, ^{ //block2 });

Estoy tratando de crear una matriz sincronizada (de red) para la empresa para la que trabajo. Mientras que la parte de redes funciona bien, he insistido en un problema.

Mi deseo era crear una nueva cola usando dispatch_create_queue , a la que agregaría dos bloques que no deben ejecutarse en el subproceso principal, sino de manera serial, lo que significa que primero el primer bloque debe ejecutarse, luego el segundo, y nunca en paralelo.

He leído la documentación de Apple, pero es confuso decir lo menos.

  • Cuando creo mi cola usando dispatch_queue_create y luego agrego los bloques (después de que se hayan definido) usando dispatch_sync , descubrí que el bloque todavía se está ejecutando en el hilo principal.

  • Cuando se usa dispatch_async , eso es cuando los bloques no se ejecutan en el hilo principal.

  • Cuando intento agregar ambos bloques utilizando dispatch_sync , se bloquean para siempre.

  • La única vez que ambos bloques parecen funcionar bien y fuera del hilo principal es cuando se llama dispatch_async .

Sin embargo, la razón por la que elegí GCD y el método de sincronización me dio la impresión de que estaba creando una nueva cola (y, por lo tanto, un nuevo hilo) y que agregar bloques a esa cola simplemente bloquearía uno hasta que el otro hubiera terminado de ejecutarse. ¿Este no es el caso o la creación de una cola no garantiza que el código no se ejecute en el hilo principal?