JustSid
JustSid

Reputation: 25318

Identify a GCD thread

I have written a Core Data abstraction class which holds the persistent store, object model and object context. To make the multithreading easier, I have written the accessor for the object context so that it returns a instance that is only available for the current thread by using [NSThread currentThread] to identify the threads.

This works perfectly as long as I don't use GCD, which I want to use as replacement for the old NSThread's. So my question is, how do I identify a GCD thread? The question applies for both iOS and Mac OS X but I guess that its the same for both platforms.

Upvotes: 2

Views: 1357

Answers (3)

flypig
flypig

Reputation: 1259

The contextForCurrentThread helper method in Magical Record is very similar to what to said (i.e. keep one context per thread). The GCD execution block, while running on a single queue, can potentially run on any thread managed by GCD, which will cause some random crashes. Check this article: http://saulmora.com/2013/09/15/why-contextforcurrentthread-doesn-t-work-in-magicalrecord/

Upvotes: 0

Catfish_Man
Catfish_Man

Reputation: 41821

You could check whether dispatch_get_current_queue() returns anything. I like Jeremy's idea of transitioning to a CD-context-per-queue instead of CD-context-per-thread model using the queue's context storage though.

Upvotes: 2

JeremyP
JeremyP

Reputation: 86661

Perhaps you can store the CD context for each thread in the GCD context using dispatch_set_context()

Upvotes: 1

Related Questions