在两个线程上使用NSPrivateQueueConcurrencyType托管对象上下文时死锁

时间:2012-02-21 03:39:59

标签: iphone ios core-data concurrency deadlock

我正在使用NSPrivateQueueConcurrencyType NSManagedObjectContext,并且在以下情况下会发生死锁。

在后台线程上,调用performBlock :.该块包含executeFetchRequest:error:个调用。

当该块正在执行时,主线程会调用performBlockAndWait:。主线程在后台线程的块完成时等待。这很正常。

当在后台的线程块上进行executeFetchRequest:error:调用时,会发生死锁。

我想executeFetchRequest:error:正在等待performBlockAndWait:完成的主线程。

这是一个错误吗?或者我不明白什么?对我来说,所有这些代码似乎都适用于NSPrivateQueueConcurrencyType MOC。

1 个答案:

答案 0 :(得分:2)

NSPrivateQueueConcurrencyType不会自动使NSManagedObjectContext成为线程安全的。如果需要在多个线程上使用Core Data,则仍应为每个线程使用单独的上下文。