2011-10-30 6 views
2

私のアプリケーションは、sqliteをバックエンドとして使用して、メモリ内のデータベース(:memory :)を作成します。sqliteのメモリ内のdbとマルチスレッド

私のマスタースレッドがインメモリデータベースへの接続を作成し、この接続を複数のスレッドが共有するようにします。これは可能ですか? SQLite 3.7.8は今すぐダウンロードできます。

the shared cachedは可能な方法ですか?

+0

私は'へのすべての接続ので、そうは思いません.htmlを – Yahia

+0

たぶん、[この質問]の重複した[1] [1]:http://stackoverflow.com/questions/3267077/can-i-achieve-scalable-multi-threaded-access-メモリ内のsqliteデータベース –

+0

@NicolasModrzykあなたのリンクには何の答えもありません。しかしそれは実際には同じ質問です。 – cateof

答えて

3

serialized modeを使用してインメモリデータベースへの接続を開くと、複数のスレッド間で接続が共有される可能性があります。

これを行うには、SQLiteをコンパイルする必要があります。threadsafe - これがデフォルトです。

アプリケーションによっては、ディスク上のデータベースへの大きな共有キャッシュや、読み取りスレッドが多い場合はWALモードでパフォーマンスが向上する場合があります。

例:メモリ:: `メモリ内の独立したDBを作成します... http://www.sqlite.org/inmemorydbを参照してください

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. 
} 
+0

ソースコードで使用できるサンプルはありますか? – cateof

+0

あなたが必要なものは不明です。答えに加えられた例。ありがとう。 –

+0

ありがとう。あなたの答えは私が探していたものです。 – cateof

関連する問題