sqlite3_prepare_v2 exc_bad_access

时间:2012-11-08 14:33:48

标签: objective-c ios database multithreading sqlite

在iOS上为sqlite使用多个阅读器时,我得到了exc_bad_access。在数据库上启用了WAL,sqlite3_threadsafety返回2,所以这应该不是问题。

我使用的代码大部分时间都适用于100k +用户,但是某些多线程竞争条件会导致sqlite3_prepare_v2拥有exc_bad_access。基本上,当我生成两个线程来执行一堆读取时,它会崩溃。

使用WAL和threadsafe sqlite,多个线程应该不是问题,但无法弄清楚是什么导致了这个exc_bad_access。

提前致谢。

1 个答案:

答案 0 :(得分:5)

从这个意义上讲,SQLite3不是线程安全的refer SQLite document

  

“线程安全”是指您可以同时在不同的线程中使用不同的SQLite数据库连接。在多个线程中同时使用相同的数据库连接从未安全。如果使用sqlite3_prepare()API创建预准备语句,则每个预准备语句都被视为从中派生它的数据库连接的一部分。因此,您无法同时在不同的线程中运行两个源自同一数据库连接的预准备语句。