SQLite内存数据库和多线程

3
我的应用程序使用SQLite作为后端,创建一个内存数据库(:memory:)。 我希望我的主线程创建一个与内存数据库的连接,并且这个连接可以被多个线程共享。这可行吗? SQLite 3.7.8现在可以下载。 共享缓存是一个可行的方案吗?

我认为不是这样的,因为每次连接到 :memory: 都会在内存中创建一个独立的DB... 参见 http://www.sqlite.org/inmemorydb.html - Yahia
可能是这个问题的重复。 - Nicolas Modrzyk
1
@NicolasModrzyk,你的链接没有答案。不过确实是同一个问题。 - cateof
@Yahia,是的,多个打开调用会生成多个内存数据库;因此,只需打开一个并在线程之间共享连接即可。 - Doug Currie
1个回答

3
如果您使用序列化模式打开与内存数据库的连接,则该连接可以在多个线程之间共享。
为使此功能正常工作,您的SQLite必须编译支持多线程 -- 这是默认设置。
根据您的应用程序,如果将大型共享缓存用于磁盘上的数据库或者有多个读取器线程,则可能会获得更好的性能。 示例:
sqlite3 *pDb

if (sqlite3_open_v2(":memory:", &pDb, SQLITE_OPEN_FULLMUTEX, NULL) == SQLITE_OK) {

    start_thread1_with_db_handle(pDb);

    start_thread2_with_db_handle(pDb);

    // etc.
}

不确定您需要什么;已添加一个示例以回答。 - Doug Currie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接