3

我的应用程序使用 sqlite 作为后端创建了一个内存数据库 (:memory:)。

我希望我的主线程创建与内存数据库的连接,并且该连接由多个线程共享。这可能吗?SQLite 3.7.8 现在可以下载了。

共享缓存是一种可能的方式吗?

4

1 回答 1

3

如果您使用序列化模式打开与内存数据库的连接,则该连接可能会在多个线程之间共享。

为此,您的 SQLite 必须编译为线程安全的——这是默认设置。

根据您的应用程序,如果您有许多读取器线程,您可能会通过对磁盘数据库的大型共享缓存或 WAL 模式获得更好的性能。

例子:

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.
}
于 2011-10-30T16:00:19.510 回答