iphone开发中,多线程下sqlite锁定的问题
2011-09-23 23:33
190 查看
资料转自:
http://blog.csdn.net/yifanernei/article/details/5642127
SQLite 支持三种线程模式:
1. 单线程模式 SQLITE_CONFIG_SINGLETHREAD
这种模式下,没有进行互斥,多线程使用不安全
2. 多线程模式 SQLITE_CONFIG_MULTITHREAD
这种模式下,在多线程中使用单个数据库连接是不安全的,否则就是安全的。(译注:即不能在多个线程中共享数据库连接)
3. 串行模式 SQLITE_CONFIG_SERIALIZED
这种模式下,sqlite是线程安全的。(译注:即使在多个线程中不加互斥的使用同一个数据库连接)
运行时选择线程模式
如果没有在编译时和启动时指定为单线程模式,那么每个数据库连接在创建时可单独的被指定为多线程模式或者串行模式,但是不能指定为单线程模式。如果在编译时或启动时指定为单线程模式,就无法在创建连接时指定多线程或者串行模式。
创建连接时用sqlite3_open_v2()函数的第三个参数来指定线程模式。SQLITE_OPEN_NOMUTEX标识创建多线程模式的连
接;SQLITE_OPEN_FULLMUTEX标识创建串行模式的连接。如果没有指定标识,或者使用sqlite3_open()或
sqlite3_open16()函数来创建数据库连接,那么在编译时或启动时指定的线程模式将作为默认的线程模式使用。
再iphone中, 启动时候 书写代码:
应可以保证数据一致性问题.
// sqlite3_config(SQLITE_CONFIG_SERIALIZED);
// sqlite3_exec(database,"PRAGMA cache_size = 8000;",NULL,NULL,NULL);
//sqlite3_exec(database,"pragma synchronous = OFF",NULL,NULL,NULL);
sqlite3_busy_timeout(database, 500); //这句代码生效,和使用线程锁一个效果...
现在的方案,线程锁和代码一起使用.
目前数据库操作部分没有用单例.即每次读取都会去连接数据库.使用单例的效果应该是一样的..
持续学习ing
http://blog.csdn.net/yifanernei/article/details/5642127
SQLite 支持三种线程模式:
1. 单线程模式 SQLITE_CONFIG_SINGLETHREAD
这种模式下,没有进行互斥,多线程使用不安全
2. 多线程模式 SQLITE_CONFIG_MULTITHREAD
这种模式下,在多线程中使用单个数据库连接是不安全的,否则就是安全的。(译注:即不能在多个线程中共享数据库连接)
3. 串行模式 SQLITE_CONFIG_SERIALIZED
这种模式下,sqlite是线程安全的。(译注:即使在多个线程中不加互斥的使用同一个数据库连接)
运行时选择线程模式
如果没有在编译时和启动时指定为单线程模式,那么每个数据库连接在创建时可单独的被指定为多线程模式或者串行模式,但是不能指定为单线程模式。如果在编译时或启动时指定为单线程模式,就无法在创建连接时指定多线程或者串行模式。
创建连接时用sqlite3_open_v2()函数的第三个参数来指定线程模式。SQLITE_OPEN_NOMUTEX标识创建多线程模式的连
接;SQLITE_OPEN_FULLMUTEX标识创建串行模式的连接。如果没有指定标识,或者使用sqlite3_open()或
sqlite3_open16()函数来创建数据库连接,那么在编译时或启动时指定的线程模式将作为默认的线程模式使用。
再iphone中, 启动时候 书写代码:
sqlite3_config(SQLITE_CONFIG_SERIALIZED); //这句话没有起到该有的效果 //.....
应可以保证数据一致性问题.
// sqlite3_config(SQLITE_CONFIG_SERIALIZED);
// sqlite3_exec(database,"PRAGMA cache_size = 8000;",NULL,NULL,NULL);
//sqlite3_exec(database,"pragma synchronous = OFF",NULL,NULL,NULL);
sqlite3_busy_timeout(database, 500); //这句代码生效,和使用线程锁一个效果...
现在的方案,线程锁和代码一起使用.
目前数据库操作部分没有用单例.即每次读取都会去连接数据库.使用单例的效果应该是一样的..
持续学习ing
相关文章推荐
- 安卓开发-多线程操作Sqlite问题
- iPhone开发【十七】多线程开发之NSOperation&NSOperationQueue——异步下载图片
- iPhone开发之SQLite
- iPhone开发之SQLite的使用
- IOS开发之不同版本适配问题3(#ifdef __IPHONE_7_0 BaseSDK Development Target)
- 利用iphone的多线程实现“售票系统”(手把手教你iphone开发 - 基础篇)
- iphone开发常见问题
- 学习iPhone开发中 sqlite3的使用
- iPhone开发 iPhone Sqlite3数据库实例操作
- iPhone开发进阶(9)--- 用SQLite管理数据库
- JNIk开发过程中遇到的多线程处理问题
- web开发中的多线程死锁问题,避免死锁
- iPhone开发进阶(11)--- 多线程的使用与注意事项
- 【iOS-Cocos2d游戏开发之八】开启高清(960*640)模式问题与解答、图片适配以及设置iphone横竖屏
- 三层框架开发时,什么时候会出现多线程安全问题
- 【Cocos2d游戏开发之八】开启高清(960*640)模式问题与解答、图片适配以及设置iphone横竖屏
- 新手对于iPhone开发环境等入门问题解答汇总
- pdf 放大失真问题-iphone开发
- sqlite3数据库的操作(iphone开发)
- Android开发中使用adb shell命令出现sqlite3 : not found 问题