SQLite WAL模式,在多个线程中具有多个事务
在WAL模式下,sqlite可以在同一个数据库上同时拥有多个事务吗?
下面是一个示例应用程序,它生成500个线程,每个线程创建一个新的sqlite连接.插入数据发生在事务中. 在此示例应用中: #include "sqlite3.h" #include "nsprprthread.h" void CreateThreads(); static void StartThread(void *Arg); int main() { CreateThreads(); } void CreateThreads() { for(int i = 0; i<500;i++) { PR_CreateThread(PR_USER_THREAD,StartThread,NULL,PR_PRIORITY_NORMAL,PR_GLOBAL_THREAD,PR_UNJOINABLE_THREAD,0); } Sleep(10000); } void StartThread(void *Arg) { sqlite3 *sqlite; char *errmsg; const char *err; const char *unused; int ret; const unsigned char * journal; const char *dir = "D:Samplestest.sqlite"; ret = sqlite3_open(dir,&sqlite); if(ret != SQLITE_OK) { err = sqlite3_errmsg(sqlite); return; } char query[100]; strcpy(query,"Begin transaction"); if(sqlite3_exec(sqlite,query,&errmsg) != SQLITE_OK ) { printf("%s",errmsg); return; } strcpy(query,"insert into test values(1,2,3,4,5,6)"); for(int i = 0; i<10;i++) { if(sqlite3_exec(sqlite,&errmsg) != SQLITE_OK ) { printf("%s",errmsg); return; } } strcpy(query,"End Transaction"); if(sqlite3_exec(sqlite,errmsg); return; } return; } 我得到’数据库被锁定’运行它. 我的问题是在WAL模式下我们可以同时进行多笔交易吗?如果是这样,我在示例应用程序中缺少什么? 解决方法无论如何,SQLite在其当前版本中不支持并发写入.可以同时有多个读者进程,但最多只有一个编写者. (见 FAQ entry #5启用“预写日志记录”后,该事实不会发生变化. WAL实现更多并发:
但不写并发:
(以上摘自the documentation on WAL.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- R使用日期列聚合data.frame
- objective-c – 为什么我的OCUnit测试失败了“代码138”?
- net.sf.json.JSONException: Positioned Update not suppor
- 【稀饭】react native 实战系列教程之项目介绍
- Ajax上传文件
- Nginx+uWsgi+Django+Python+MongoDB+mySQL服务器搭建
- ruby-on-rails – Rails测试 – 检查用户是否使用Devise登录
- ruby-on-rails – 如何在Rails中更改URL
- 使用PowerShell从xml的元标记中提取文本
- react-native – 为Text组件添加默认颜色的更好方法?