开发者社区> 问答> 正文

CoreData多线程的同步问题

CoreData问题:需要对persistentCoordina加锁,但不知道加在哪些代码合适。不同的NSManagedObjectContext,但公用同一个NSPersistentCoordinator,是否允许两个线程同时进行读操作,而不对NSPersistentCoordinator进行lock?还是不管读和写,都需要对lock coordinator?
之前虽然是多线程操作coredata,没加lock,但是由于工作线程并没有很频繁的操作数据库,因此没出问题。但是现在我的工作线程需要2分钟一次对数据库进行查询、更新的逻辑,所以程序有时可以运行,有时executeFetch时候会卡死,报的错误是deadlock,死锁!很奇怪,我这时候根本就没对数据库加过锁啊!
是因为,coordinator对所有的操作,都会序列化(serialize operations),然后多线程操作coredata时候,我代码里面没有lock coordinator,所以就出现了deadlock的错误?
多谢大家的关注或回答啊!

展开
收起
a123456678 2016-07-19 16:31:23 1877 0
1 条回答
写回答
取消 提交回答
  • 首先建议不要在多线程中操作同一份NSPersistentStoreCoordinator。
    多线程读写操作同一个NSPersistentStoreCoordinator确实有可能造成死锁。所以,建议每一个写操作都给NSPersistentStoreCoordinator加锁,避免思索出现

    2019-07-17 19:58:32
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
多线程 立即下载
Android开发之多进程架构 立即下载