La documentación de las propiedades en Obj-C 2.0 dice que las propiedades atómicas usan un bloqueo interno, pero no documenta las características específicas del bloqueo. ¿Alguien sabe si se trata de un bloqueo por propiedad, un bloqueo por objeto separado del implícito utilizado por @synchronized (self), o el equivalente de @synchronized (self)?Bloqueando detalles de @ propiedades atómicas sintetizadas en Obj-C 2.0
Respuesta
El bloqueo utilizado por atomic @properties es un detalle de implementación: para los tipos apropiados en las plataformas apropiadas, son posibles las operaciones atómicas sin bloqueo y me sorprendería que Apple no las aprovechara. No hay acceso público al bloqueo en ningún caso, por lo que no puede @synchronize en el mismo bloqueo. Varios ingenieros de Apple han señalado que las propiedades atómicas no garantizan la seguridad del hilo; las propiedades atómicas solo garantizan que los conjuntos/conjuntos de ese valor sean atómicos. Para una correcta seguridad de la hebra, tendrá que utilizar el bloqueo o la sincronización de mayor nivel y es casi seguro que no quiera utilizar el mismo bloqueo que podría estar utilizando el captador/decodificador de sintetizadores.
Mirando el código generado (iOS SDK GCC 4.0/4.2 para ARM),
- 32-bit
assign
propiedades (incluyendostruct {int32_t v;}
) se accede directamente. - Se accede a las estructuras de más de 32 bits con objc_copyStruct().
double
yint64_t
se accede con objc_copyStruct, excepto en GCC 4.0, donde se accede directamente con stmia/ldmia (no estoy seguro de si se garantiza que esto sea atómico en caso de interrupciones).- retención/copia de acceso de acceso objc_getProperty y objc_setProperty.
Cocoa with Love: Memory and thread-safe custom property methods proporciona algunos detalles sobre cómo se implementan en runtime version objc4-371.2; obviamente, la implementación precisa puede variar entre los tiempos de ejecución (por ejemplo, en algunas plataformas puede usar el intercambio atómico/CAS para girar el ivar en lugar de usar otro bloqueo).
- 1. ¿Se lee y escribe en propiedades atómicas en C#?
- 2. ¿Por qué cambiar el nombre de las propiedades sintetizadas en iOS con guiones bajos destacados?
- 3. ¿Bajo qué circunstancias son útiles las propiedades atómicas?
- 4. #typedef y KVC en ObjC
- 5. Propiedades sintetizadas para tipos de datos primitivos que usan ARC: ¿débiles o asignados?
- 6. Codificación NSURL en ObjC
- 7. operaciones atómicas en C++
- 8. Operaciones atómicas en ARM
- 9. Operaciones atómicas en Django?
- 10. msbuild.exe permaneciendo abierto, bloqueando archivos
- 11. error: /usr/include/objc/objc-class.h: Ningún archivo o directorio
- 12. manejo de excepciones ObjC en monotouch
- 13. PyGTK bloqueando hilos no GUI
- 14. "Bloqueando" dos vectores y ordenándolos
- 15. ¿Ruby tiene variables atómicas?
- 16. CUDA Lista de operaciones atómicas
- 17. bloqueando solo 1 operación?
- 18. Android onClick bloqueando onFling
- 19. operaciones atómicas Hilo de seguridad en gcc
- 20. ¿Qué está bloqueando fsockopen?
- 21. Operaciones atómicas en C en Linux
- 22. Seguridad de PHP: ¿almacenar detalles de conexión en constantes o propiedades privadas?
- 23. ObjC: objeto devuelto descripción vacía?
- 24. ¿Cómo compilar código objc en Linux?
- 25. Uncrustify ObjC newline after method
- 26. C# List <> Ordene con 3 propiedades .Net 2.0
- 27. Compartir falsa y variables atómicas
- 28. operaciones atómicas para shared_ptr en C++ 11
- 29. Operaciones atómicas: debajo del capó
- 30. ¿Qué operaciones en Java se consideran atómicas?
Sí, ver "hombre atómico". –
Ok. Estaba preguntando porque me preguntaba si habría una sobrecarga adicional para usar ambas propiedades atómicas y una @synchronized() cuando se trata de varias propiedades al mismo tiempo. Parece que, para las operaciones que no se pueden hacer usando una primitiva atómica, habrá una sobrecarga adicional, ya que usa 2 cerraduras de manera efectiva. Ah bueno. –
En este caso, cuando ya está utilizando un bloque @synchronized o protegido de otra manera para implementar la semántica de bloqueo de nivel superior, puede tener sentido utilizar elementos no atómicos para sus propiedades. –