2011-07-02 35 views
9

Según tengo entendido, iOS no es compatible con __thread. Obviamente, hay una manera de hacerlo usando pthread_setspecific. Sin embargo, ¿ya existe una clase de plantilla que haya implementado esta funcionalidad?Almacenamiento Thread-Local y iOS

Comí para reinventar la rueda, especialmente porque no será una simple pieza de código para escribir.

Cualquier enlace sería muy apreciado!

Saludos

+1

¿Se puede usar ['boost :: thread_specific_ptr'] (http://boost.org/doc/libs/release/doc/html/thread/thread_local_storage.html#thread.thread_local_storage.thread_specific_ptr)? –

+0

@ Space_C0wb0y: No sé, posiblemente. No estaba al tanto, así que es una posibilidad :) – Goz

Respuesta

19

Fundación ofrece -[NSThread threadDictionary]. Puede usar esto para almacenar objetos Objective-C locales de subprocesos, que podrían incluir un NSValue que envuelva la dirección de cualquier almacenamiento dinámico.

Tenga en cuenta que Cocoa se está moviendo hacia la ejecución de subprocesos de código subprocesado, donde envía bloques de código para ejecutar en cualquier subproceso propiedad del sistema. Este es el modelo utilizado por Grand Central Dispatch y el NSOperationQueue s compartido. El código que depende del almacenamiento local de subprocesos no hará el mejor uso de este modelo. Ver el Concurrency Programming Guide de Apple para más información.

ETA: A partir de iOS 5/OS X 10.7, Grand Central Dispatch ganado lo que se podría llamar el almacenamiento de colas local a través de los dispatch_queue_set_specific, dispatch_queue_get_specific y dispatch_get_specific funciones. El colocador le permite suministrar una función de destructor además del valor para cuando establece un nuevo valor para la clave o cuando se destruye la cola. La cola getter sans usa la cola actual como contexto, y repetirá la búsqueda en la cola objetivo de la cola actual si la clave no está definida en la cola actual (similar a cómo funciona la búsqueda de propiedades en un sistema OO prototípico).

Cuestiones relacionadas