objective-c - 从两个线程调用时,NSManagedObjectContext performBlockAndWait 导致死锁

标签 objective-c xcode macos core-data

我有一个 OSX 应用程序,我在其中使用父/子 NSManagedObjectContext 设置。子 MOC 具有 NSPrivateQueueConcurrencyType 并且是我主要使用的类型。父级设置为 NSMainQueueConcurrencyType

当我在从主线程调用子上下文的同时从后台线程调用 performBlockAndWait 时,我遇到了死锁 – semaphore_wait_trap。暂停调试器显示两个线程都停留在 performBlockAndWait

我该如何解决这个问题?我认为这种方法正是为这种情况而设计的,它只是将 block 排队到上下文的私有(private)队列中,然后适本地返回?

最佳答案

我通过创建一个串行队列来解决这个问题,然后通过它执行我所有的 performBlock 调用以确保它们不会相互混淆。老实说,我不确定这是否是好的做法,但它确实解决了我的特定情况的问题。

关于objective-c - 从两个线程调用时,NSManagedObjectContext performBlockAndWait 导致死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16376543/

相关文章:

ios - 如何垂直对齐(居中)UITableView 的内容?

ios - 在单词或字符边界处截断包含表情符号或 unicode 字符的字符串

python - 未找到安装工具

swift - XCTestCase - 如何断言包含字符串的 NSTextView?

macos - Mac OS 10.6.1(雪豹)如何安装OpenCV2.0

ios - 如何在 swift 上设置 facebook SDK?

ios - 在 iOS 中检索短信文本

ios - 测量ios应用程序的内存使用情况

ios - Xcode约束如何同时展开两个按钮?

xcode - 带有嵌入式框架的 Interface Builder 中的图像