加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite内存数据库在多线程下的使用问题

发布时间:2020-12-13 00:26:34 所属栏目:百科 来源:网络整理
导读:WINDOWS平台,多线程服务器,我想创建一个全局内存数据库,然后在其他线程里面使用这个库,包括读写,弄的时候发现有几个问题: 1 方法一:程序启动时创建一个全局Sqlite连接,各个线程都可以操作这个实例。但经测试发现,这么做,如果不做同步,读写都会冲突
WINDOWS平台,多线程服务器,我想创建一个全局内存数据库,然后在其他线程里面使用这个库,包括读写,弄的时候发现有几个问题:

1 方法一:程序启动时创建一个全局Sqlite连接,各个线程都可以操作这个实例。但经测试发现,这么做,如果不做同步,读写都会冲突。也就是说,无论读写,只能有一个线程操作该实例,这样未免也太痛苦了,读也需要同步,效率降低太多。

2 方法二:如果把数据库创建到文件,那么可以在创建每个服务线程里面打开这个数据库,然后操作,这样就不需要处理同步了。(读不需要同步,写Sqlite自己做了同步LOCK)
不过如果把数据库建立到内存,好像就不能这样了:
全局数据库用sqlite_open(":memory:",&db)创建,但在子线程里面如果也用sqlite_open(":memory:",&db)得到的是一个空数据库。事实上,即使在同一个线程里面这样做:
sqlite3* db1=NULL;
sqlite3* db2=NULL;
sqlite3_open(":memory:",&db1);
//在db1中创建表,填数据等等
sqlite3_open(":memory:",&db2);//这时候得到的db2是一个空的数据库

在这种情况下如何才能得到先前已经创建的内存数据库?


第 1 楼 xiao_fang(frank) 2006-4-7 17:10:52 得分: 100 返回顶部
可能受到Sqlite自身限制,你可下载源码看一下sqlite3_open对于内存数据库是如何处理的
第 2 楼 lsgt() 2006-4-7 17:38:16 得分: 0 返回顶部 就是没看懂啊。不知道有没有达人知道如何处理这样的问题?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读