Sqlite内存数据库在多线程下的使用问题
sqlite 内存数据库的attach 搞反了,应该把文件数据库attach到内存数据库中。sqlite3_open("c:/A.dat",&db); 已经搞定~ 并没有多线程写操作,A线程是不停读,B线程是某一时候去写/修改! A先启动,过段时间B才启动,但是由于A线程是每20毫秒随机从50万条数据中读一条数据,所以查询间隔很快(20ms);此时B线程写1万条数据,然后随机修改2万条数据,B始终是成功的,但是在B操作的同时,A几乎时候处于busy状态,大部分查询(20ms)都是返回busy状态,偶尔能查询出一个值(估计是在B线程写/修改某条数据成功,还未开始下条数据的写/修改的空隙时),B线程写/修改一完成,A线程马上就正常了。 得到三点结论: 1、任何数据库都有读/写互斥(锁),oracle/sqlserver/mysql/sqlite... 2、完全可以修改sqlite源代码,在thread读写有互斥的时候适当的sleep或者提示(新版的sqlite lib已经增加了sqlite3_busy_timeout、sqlite3_busy_handler功能) 3、当CPU运算能力超强时,一定会降低互斥的出现几率,但是互斥这种现象一定不会消失,因为互斥锁的出现就是为了保证数据的完整性,remember! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 详解vue 配合vue-resource调用接口获取数据
- .net – 为什么字典对象不能在C#中进行XmlSerialized?
- 使用immutable优化React
- swift – 如何在Vapor 3中处理密码哈希?
- c – 在不破坏元素的情况下调整std :: vector的大小
- ruby-on-rails – 在下拉列表中的树结构中显示类别/子类别
- ruby-on-rails – 如何从Carrierwave Uploader对象引用父模
- Cocos2d-x 3.1.1 学习日志17--移植出现error C1083: 无法打
- 基于React Native构建的仿京东客户端(三) - 功能图标按钮
- Cocos2D中相关问题提问的几个论坛