ios - CoreData多线程的同步问题
PHPz
PHPz 2017-04-17 11:06:30
0
2
631

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

PHPz
PHPz

学习是最好的投资!

全部回覆(2)
大家讲道理

兩分鍾一次,一次多久,難道每次操作時間要到秒級嗎?
秒級的話自己給線程加個鎖,時間更長的話要考慮數據緩存到內存等

刘奇

首先建議不要在多線程中操作同一份NSPersistentStoreCoordinator。
多線程讀寫操作同一個NSPersistentStoreCoordinator確實有可能造成死鎖。所以,建議每一個寫操作都給NSPersistentStoreCoordinator加鎖,避免思索出現

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板