编辑:如果我可以浏览文件,我会很危险。 http://www.sqlite.org/sharedcache.html
原来的:
sqlite3_open_v2 函数带有签名:
int sqlite3_open_v2(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb, /* OUT: SQLite db handle */
int flags, /* Flags */
const char *zVfs /* Name of VFS module to use */
);
第三个参数int flags
支持许多选项,其中一些是不言自明的:
#define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */
/* snip */
#define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */
我的数据库使用(还)没有任何问题,但我想知道 NOMUTEX 与 FULLMUTEX 和 SHAREDCACHE 与 PRIVATECACHE 选项的含义。我发现的 sqlite.org 页面上的描述,例如 SQLITE_OPEN_NOMUTEX,并不是很有帮助。
如果设置了 SQLITE_OPEN_NOMUTEX 标志,那么只要在编译时或启动时没有设置单线程模式,数据库连接就会以多线程模式打开。
如果根据文档已经防止同时读取/写入,互斥标志会做什么?
此外,缓存中有什么,如果我决定共享它,我与谁共享,这对他们的读/写有何影响?
它是否仅在 close() 上刷新?
任何见解都值得赞赏,即使是指向更好描述的链接也会很棒。