ban*_*anu 5 sqlite multithreading ios
在我的应用程序中,后台sqlite线程正在运行...在后台线程中它从Web服务获取数据并将数据插入或更新到数据库中.如果用户从前台插入或删除数据,有时我会崩溃它显示"sqlite dblocked".但它不会返回sqlite busy错误.
我测试了线程安全模式
NSLog(@" sqlite3_threadsafe() = %d", sqlite3_threadsafe());
Run Code Online (Sandbox Code Playgroud)
它显示线程安全是2.
我想检查是否有其他数据库正在写数据,如果db正在写数据..我想在上一个写任务完成后写数据.
如何处理这些情况..
您可以使用锁(例如" 线程编程指南"的" 同步"部分中列出的那些),也可以使用专用的串行队列.例如,创建一个队列:
@property (nonatomic, strong) dispatch_queue_t databaseQueue;
Run Code Online (Sandbox Code Playgroud)
实例化:
self.databaseQueue = dispatch_queue_create("com.company.app.database", 0);
Run Code Online (Sandbox Code Playgroud)
无论何时你想与数据库进行交互,你都可以做到
dispatch_sync(self.databaseQueue, ^{
// do your database activity here
});
Run Code Online (Sandbox Code Playgroud)
如果您想简化生活,FMDB库有一个FMDatabaseQueue对象可以为您完成大部分工作(并且通常会大大简化您的数据库交互).
| 归档时间: |
|
| 查看次数: |
8092 次 |
| 最近记录: |