編集: ドキュメントをナビゲートできたら危険です。 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 */
);
3 番目の引数 は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_OPEN_NOMUTEX について、私が見つけた sqlite.org ページの説明はあまり役に立ちません。
SQLITE_OPEN_NOMUTEX フラグが設定されている場合、コンパイル時または開始時にシングルスレッド モードが設定されていない限り、データベース接続はマルチスレッド スレッド モードで開かれます。
ドキュメントによると、同時読み取り/書き込みが既に保護されている場合、mutex フラグは何をしますか?
また、キャッシュには何が入るのか、それを共有することにした場合、誰と共有しているのか、それが読み取り/書き込みにどのように影響するのか?
close() のみでフラッシュされますか?
より良い説明へのリンクでさえ素晴らしいでしょう。