/ / V tomto prípade @synchronizuje ochranu proti rasovým stavom? iphone, multithreading, ios, ipad, nsoperationqueue

Zosúladí @synchronizovať v tomto prípade s podmienkami pretekov? iphone, multithreading, ios, ipad, nsoperationqueue

Chcem použiť základné údaje v pozadí aNSOperationQueue. Teraz som si myslel, prečo by som nemal len vytvoriť triedu, ktorá by mala všetky veci Core Data stack s vlastnosťou NSManagedObjectContext, a potom len urobiť túto vlastnosť atómovú?

Jedna vec, o ktorej si nie som istý @synchronize(self) {...} je toto: Predpokladajme, že mám vlastnosť, ktorá je považovaná za bezpečnú pre nite:

@property (retain) NSManagedObjectContext *moc;

Každá NSOperácia alebo vlákno pristupuje k a CoreDataTools trieda, ktorá má túto mocnosť. Prístup k tejto moc moc ako toto:

// Assume: Inside an NSOperation or new thread here...
NSManagedObjectContext *moc = [[CoreDataTools sharedInstance] moc];

// Do a lot of things with moc. Add and remove 20 objects.

Bolo by to efektívne vôbec? Neviem, kedy je táto zámka efektívna, len v prípade skutočného prístupu k nehnuteľnosti alebo môžem bezpečne pracovať s inštanciou NSManagedObjectContext, až kým sa NSOperation alebo volaná metóda pozadia vlákna nevykoná a nevráti sa?

Viem, že NSMangagedObjectContext má metódu blokovania. Chcem všeobecne vedieť, či to funguje alebo nie.

odpovede:

4 pre odpoveď č. 1
 @synchronized(self) { /* lock is effective inside here only */ }

2 pre odpoveď č. 2

Nie. Každé vlákno by malo mať vlastný kontext spravovaných objektov.

Ďalšie informácie: súbežnosť s hlavnými údajmi