Потоковое локальное хранилище и iOS - PullRequest
9 голосов
/ 02 июля 2011

Насколько я понимаю, iOS не поддерживает __thread.Очевидно, есть способ сделать это, используя pthread_setspecific.Однако, существует ли уже шаблонный класс, который реализовал эту функциональность?

Я бы съел заново изобрести колесо, тем более что это не будет простой кусок кода для написания.

Любые ссылки будут очень признательны!

Ура

1 Ответ

20 голосов
/ 02 июля 2011

Фонд обеспечивает -[NSThread threadDictionary].Вы можете использовать это для хранения локально-потоковых объектов Objective-C, которые могут включать NSValue, обертывающий адрес любого динамического хранилища.

Обратите внимание, что Какао движется к поточному выполнению многопоточного кода, гдеВы отправляете блоки кода для запуска в любом доступном системном потоке.Это модель, используемая Grand Central Dispatch и совместно используемая NSOperationQueue s.Код, основанный на локальном потоке, не будет наилучшим образом использовать эту модель.См. Apple Руководство по программированию параллелизма для получения дополнительной информации.

ETA: Начиная с iOS 5 / OS X 10.7, Grand Central Dispatch получила то, что вы могли бы назвать локальным хранилищем очередичерез функции dispatch_queue_set_specific, dispatch_queue_get_specific и dispatch_get_specific.Сеттер позволяет вам предоставлять функцию деструктора в дополнение к значению, когда вы устанавливаете новое значение для ключа или когда очередь уничтожается.Очередь получения без использования использует текущую очередь в качестве контекста и будет повторять поиск в целевой очереди текущей очереди, если ключ не определен в текущей очереди (аналогично тому, как работает поиск свойства в прототипной системе OO).

...