可能重复:
How does this cause deadlock (once in a while) and how do I unravel this
thread1
:
@synchronized(self) //semaphore_wait_trap
{
saveSuccesfully = [moc save:&error];
if (!saveSuccesfully) {
CLog(@"Error in Saving %@", error);
}
else{
}
}
moc是一个managedobjectcontext。它的父上下文是内存管理对象上下文。所有托管对象上下文都有一个父上下文(父项除外)。父主动在主线程中初始化一次,几乎从未再次调用过。
与该操作同步的其他操作也会停止:
在主线程中,例如:
主线程
@synchronized(self) //_psycnh_mutexwait
{
if (managedObjectContexts[[self threadKey]] == nil ) {
NSManagedObjectContext *threadContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
threadContext.parentContext = [self managedObjectContextMainContext];
threadContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
managedObjectContexts[[self threadKey]] = threadContext;
}
}
这部分我理解。如果某些thread1
没有停止,那么一切都会好的。
这是IOS5