2012-09-13 16 views

Respuesta

8

Si todo lo que tiene es dispatch_queue_t que le pasó a usted "otra persona", no hay forma de que usted lo sepa. Esa información está efectivamente oculta de usted. Si está creando las colas usted mismo, puede usar dispatch_queue_set_specific y dispatch_queue_get_specific para esconder un valor en los datos de contexto de la cola, y luego leerlo, pero si no está creando la cola, no tiene suerte.

FWIW, este tipo de sugerencias en un diseño frágil/antipatrón. Tomar una cola como parámetro implica que programaría bloques para su futura ejecución en esa cola. Desde esa perspectiva, no debería importar si la cola es concurrente o serial.

Más al punto, su código debe escribirse de manera que no importe si se ejecuta en una cola serial o concurrente. Si utiliza recursos compartidos, entonces debe sincronizar el acceso a esos recursos de manera que si se ejecutara en una cola concurrente, el acceso a esos recursos sería seguro. Por el contrario, evite situaciones en las que correr en una cola en serie sería un problema (es decir, no intente lograr bloqueos recursivos usando dispatch_sync con una cola que podría ser en serie.)

10

La forma idiomática de garantizar la ejecución serializada en un la cola arbitraria proporcionada por el llamador en GCD es crear su propia cola en serie y establecer que la cola proporcionada por el llamador sea la cola de destino de su cola (utilizando la API dispatch_set_target_queue (3)).

+0

¡He descubierto otro regalo de GCD! ¡Gracias! Después de leer un poco de literatura, he llegado a la conclusión de que este es realmente un buen enfoque. :-) –

Cuestiones relacionadas