-1

編集: ドキュメントをナビゲートできたら危険です。 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() のみでフラッシュされますか?

より良い説明へのリンクでさえ素晴らしいでしょう。

4

1 に答える 1