Определить нить GCD - PullRequest
       21

Определить нить GCD

2 голосов
/ 03 марта 2011

Я написал класс абстракции Core Data, который содержит постоянное хранилище, объектную модель и контекст объекта.Чтобы упростить многопоточность, я написал аксессор для контекста объекта, чтобы он возвращал экземпляр, который доступен только для текущего потока, с помощью [NSThread currentThread] для идентификации потоков.

Это прекрасно работает до тех пор, покапоскольку я не использую GCD, который я хочу использовать в качестве замены старого NSThread.Итак, мой вопрос, как мне определить поток GCD?Этот вопрос касается как iOS, так и Mac OS X, но я думаю, что он одинаков для обеих платформ.

Ответы [ 3 ]

1 голос
/ 03 марта 2011

Вы можете проверить, возвращает ли dispatch_get_current_queue () что-нибудь. Мне нравится идея Джереми о переходе на CD-context-per-queue вместо модели CD-context-per-thread с использованием хранилища контекста очереди.

1 голос
/ 03 марта 2011

Возможно, вы можете сохранить контекст CD для каждого потока в контексте GCD , используя dispatch_set_context ()

0 голосов
/ 08 декабря 2013

Вспомогательный метод contextForCurrentThread в Magical Record очень похож на то, что было сказано (т.е. сохраняйте один контекст на поток).Блок выполнения GCD, будучи запущенным в одной очереди, может потенциально выполняться в любом потоке, управляемом GCD, что приведет к случайным сбоям.Проверьте эту статью: http://saulmora.com/2013/09/15/why-contextforcurrentthread-doesn-t-work-in-magicalrecord/

...