2011-07-02 19 views
9

Rozumiem, że iOS nie obsługuje __thread. Jest oczywiście sposób na zrobienie tego przy pomocy pthread_setspecific. Czy istnieje już jednak klasa szablonu, która zaimplementowała tę funkcjonalność?Wątek-lokalny magazyn i iOS

Zjadłem by wymyślić nowe koło, zwłaszcza, że ​​nie będzie to prosty kod do napisania.

Wszelkie linki będą niezwykle cenne!

Cheers

+1

Czy można użyć ['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: Nie wiem, prawdopodobnie. Nie wiedziałem o tym, więc jest taka możliwość :) – Goz

Odpowiedz

19

Fundacja zapewnia -[NSThread threadDictionary]. Można go użyć do przechowywania obiektów Objective-C w lokalnym wątku, które mogą zawierać NSValue zawijanie adresu dowolnej pamięci dynamicznej.

Należy zauważyć, że kakao przechodzi w wątkowe wykonywanie kodu gwintowanego, w którym przesyła się bloki kodu do uruchomienia na dowolnym dostępnym wątku systemowym. Jest to model używany przez Grand Central Dispatch i współużytkowany NSOperationQueue. Kod opierający się na lokalnej pamięci wątku nie zapewni najlepszego wykorzystania tego modelu. Więcej informacji na ten temat można znaleźć w Apple's Concurrency Programming Guide.

ETA: Począwszy iOS 5/OS X 10.7, Grand Central Dispatch zyskał co można nazwać przechowywanie kolejki lokalnego poprzez dispatch_queue_set_specific, dispatch_queue_get_specific i dispatch_get_specific funkcji. Setter pozwala ci dostarczyć funkcję destruktora oprócz wartości, gdy ustawisz nową wartość dla klucza lub gdy kolejka zostanie zniszczona. Kolejka getter sans używa aktualnej kolejki jako kontekstu i powtórzy wyszukiwanie w kolejce docelowej bieżącej kolejki, jeśli klucz nie jest zdefiniowany w bieżącej kolejce (podobnie jak działa wyszukiwanie właściwości w prototypowym systemie OO).

Powiązane problemy