关注点:
- SQLite 3.7.12.1 / C++
- SQLITE_OS_OTHER = 1(提供同步方法)
- SQLITE_THREADSAFE = 1
- 日记模式=记忆;
场景:
- 在 RAM 中创建的带有表 A1 (r/w) 的数据库池“A”。
- 在闪存/硬盘上创建的带有 FTS4 表 B1 (r/w) 的数据库池“B”。A1 以只读方式附加到此池。
A1在一个线程(事务)中不断更新。B1在另一个线程(事务)中更新,但更新取决于 A1 查询选择。当 B1 被更新(插入/更新/删除)和 A1 被同时修改时,很多时候会出现以下错误:“数据库磁盘映像格式错误”并且下一个事务失败并出现错误:“无法在事务中启动事务”。
问题:
是什么导致了第一个错误?A1 在 B1 查询中是只读的。尽管事务是独立的,并且不需要同步。当我将所有事务与外部互斥锁同步时,不会出现此错误。