2012-11-08 2 views
5

iOSのsqliteで複数のリーダーを使用している場合、私はexc_bad_accessを取得しています。 WALはデータベースで有効になっており、sqlite3_threadsafetyは2を返します。これは問題ではないはずです。sqlite3_prepare_v2 exc_bad_access

私が使用しているコードは、ほとんどの場合、100k +ユーザでうまく動作しますが、sqlite3_prepare_v2にexc_bad_accessがある特定のマルチスレッド競合状態があります。基本的に私は一束の読み込みを行うために2つのスレッドを生成するとクラッシュします。

WALとthreadsafe sqliteでは、複数のスレッドで問題はありませんが、このexc_bad_accessの原因を特定できません。

ありがとうございます。

+0

これはあなたを助けるかもしれません:http://stackoverflow.com/questions/2323684/sqlite-concurrency-issues – Raviprakash

答えて

5

その意味でSQLite3のは、「スレッドセーフ」私たちは、あなたが同時に異なるスレッドで別のSQLiteデータベース接続を使用することができることを意味することで、安全refer SQLite document

スレッドされていません。複数のスレッドで同じデータベース接続を同時に使用することは決して安全ではありませんでした。 sqlite3_prepare()APIを使用してプリペアドステートメントを作成すると、準備された各ステートメントは、それが導出されたデータベース接続の一部と見なされます。したがって、同時に同じデータベース接続から生成された2つのプリペアドステートメントを異なるスレッドで実行することはできません。