Comencé a controlar las colas por primera vez y siento que tengo una buena idea de cómo usarlas y felicitaciones a Apple por hacerlas bastante sencillas de usar.@synchronized vs GCD dispatch_barrier_async
Lo que encontré, sin embargo, es el desafío de múltiples hilos para leer y escribir en los mismos objetos. En this question obtuve this fine answer, y me deja pidiendo alguna confirmación de parte de todos para asegurarme de que entiendo los pros y los contras de @synchronized
contra GCD dispatch_barrier_async
.
Esta es la forma en que lo veo:
@synchronized
PRO: Usted puede envolver cualquier objeto en @synchronized
, siempre y cuando tenga acceso/puntero a ella, por lo que es fácil para los modelos de datos compartidos que sean manejado con seguridad de diferentes objetos en el programa
PRO: con el apoyo de iOS 4 (y quizás antes)
`dispatch_barrier_async` with custom DISPATCH_QUEUE_CONCURRENT
PRO: no DISPATCH_QUEUE_CONCURRENT sólo está disponible en iOS 5 (como se discutió here), por lo que está disponible para iOS de soporte 4
CON:: es más rápido que @synchronized
CON No es tan fácil utilizar al controlar la lectura/escritura en un objeto de muchos otros objetos, ya que las colas están más fácilmente disponibles solo para el objeto que las crea (sin trabajar para evitar esta limitación)
En resumen, la mejor herramienta depende de las necesidades del programa, en consideración de lo anterior.
Si alguien tiene algo que agregar o señalar, lo agradecería.
Su punto 2) no se aplica a dispatch_barrier, ya que no puede usar esto en una cola global, solo una cola simultánea personalizada. Para la lectura/escritura segura de hilos mediante el mecanismo GCD, necesita una cola simultánea personalizada. Descrito aquí: http://www.mikeash.com/pyblog/friday-qa-2011-10-14-whats-new-in-gcd.html – johnbakers
He editado mi respuesta: utilicé las técnicas de Mike Ash en mi iOS 4.3 aplicación, así que estoy seguro de las barreras donde hay colas concurrentes. –
esto es interesante, en otra cuestión mía y también en el sitio de Ash, todas las colas simultáneas personalizadas solo estuvieron de acuerdo en iOS 5 y posteriores; estás sugiriendo lo contrario. las colas simultáneas globales siempre han estado disponibles, pero todos tienen la impresión de que las colas simultáneas personalizadas son una adición muy reciente a iOS (aunque han estado en OS X anteriormente) – johnbakers