5

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

我使用的代码在大多数情况下对于 100k+ 用户都可以正常工作,但是有某些多线程竞争条件会导致 sqlite3_prepare_v2 具有 exc_bad_access。基本上,当我产生两个线程来进行一堆读取时,它会崩溃。

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

提前致谢。

4

1 回答 1

5

从这个意义上说,SQLite3 不是线程安全的,请参阅 SQLite 文档

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

于 2013-06-13T13:26:21.827 回答