我正在使用一个我没有编写的围绕SQLite的Objective-C包装器,文档很少。..
这不是FMDB。编写此包装器的人在编写此代码时不知道FMDB。
似乎代码遇到了一个错误,即从多个线程访问数据库连接——根据SQLite文档,如果SQLite是用SQLite_THREADSAFE 2编译的,那么这将不起作用。
现在,当sqlite调用返回sqlite_BUSY或sqlite_LOCKED时,将调用重试循环,重试返回sqlite_MISUSE。不好的。
抓住机会,我用自己编译的版本替换了提供的sqlite库,将sqlite_THREADSAFE设置为1——根据文档,这意味着sqlite可以在多线程环境中安全使用,有效地序列化了所有操作。它会导致性能下降,我还没有测量到这一点,但它消除了应用程序中发生的SQLITE_MISUSE,似乎不需要重试逻辑,因为它从未达到忙碌或锁定状态。
因此,如果有人对查找多线程错误有任何建议,我将不胜感激。
提前感谢。