2012-11-08 70 views
5

在iOS上使用多個閱讀器進行sqlite時,我得到exc_bad_access。 WAL在數據庫上啓用,sqlite3_threadsafety返回2,所以這應該不成問題。sqlite3_prepare_v2 exc_bad_access

我使用的代碼對大多數時間內的100k +用戶來說工作正常,但是某些多線程競爭條件會導致sqlite3_prepare_v2擁有exc_bad_access。基本上,當我產生兩個線程來做一堆讀取它崩潰。

使用WAL和線程安全的sqlite,多線程不應該是一個問題,但無法弄清楚是什麼導致exc_bad_access。

在此先感謝。

+0

這可能會幫助你:http://stackoverflow.com/questions/2323684/sqlite-concurrency-issues – Raviprakash

回答

5

在這個意義上的SQLite3不是線程安全的refer SQLite document

通過「線程」我們的意思是,你可以在同一時間使用在不同的線程不同的SQLite數據庫的連接。在多個線程中同時使用相同的數據庫連接從未安全。如果使用sqlite3_prepare()API創建預準備語句,則每個準備好的語句都被認爲是從中派生出來的數據庫連接的一部分。因此,您不能同時在不同線程中運行源自相同數據庫連接的兩個準備好的語句。