为什么这段代码会导致死锁?

时间:2013-01-16 04:43:13

标签: ios objective-c xcode core-data

  

可能重复:
  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

0 个答案:

没有答案