2012-11-08 112 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创建预准备语句,则每个准备好的语句都被认为是从中派生出来的数据库连接的一部分。因此,您不能同时在不同线程中运行源自相同数据库连接的两个准备好的语句。