2012-11-08 16 views
5

Ich bekomme exc_bad_access, wenn mehrere Leser für SQLite auf iOS verwenden. WAL ist in der Datenbank aktiviert und sqlite3_threadsafety gibt 2 zurück, das sollte kein Problem sein.sqlite3_prepare_v2 exc_bad_access

Der Code, den ich verwende funktioniert gut für 100k + Benutzer die meiste Zeit, aber es gibt bestimmte Multithreading Race-Bedingungen, die sqlite3_prepare_v2 zu exc_bad_access haben. Grundsätzlich, wenn ich zwei Threads spawne, um eine Menge Lesevorgänge durchzuführen, stürzt es ab.

Mit WAL und threadsafe sqlite sollten mehrere Threads kein Problem sein, aber nicht herausfinden, was diesen exc_bad_access verursacht.

Vielen Dank im Voraus.

+0

dies könnte Ihnen helfen: http://stackoverflow.com/questions/2323684/sqlite-concurrency-issues – Raviprakash

Antwort

5

In diesem Sinne ist SQLite3 nicht Thread-sicher refer SQLite document

Mit „THREAD“ meinen wir, dass Sie verschiedene SQLite Datenbank-Verbindungen in verschiedenen Threads gleichzeitig verwendet werden können. Es war nie sicher, dieselbe Datenbankverbindung gleichzeitig in mehreren Threads zu verwenden. Wenn Sie die API sqlite3_prepare() zum Erstellen vorbereiteter Anweisungen verwenden, wird jede vorbereitete Anweisung als Teil der Datenbankverbindung betrachtet, von der sie abgeleitet wurde. Sie können also zwei vorbereitete Anweisungen, die von derselben Datenbankverbindung stammen, nicht gleichzeitig in verschiedenen Threads ausführen.