【发布时间】:2016-07-21 17:20:34
【问题描述】:
我有多个使用相同 SQLite 数据库的进程(c++、Windows 8)。我用SQLITE_CONFIG_SERIALIZED 和PRAGMA busy_timeout = 60000; 配置了连接。使用的日志模式 - DELETE。
测试场景:
- 进程 #1 打开连接,进行读/写,休眠 5 秒
- 进程 #2 打开连接,进行读/写
在该进程 #1 无法写入数据库之后 - 它在调用 SQLite API(sqlite3_step、sqlite3_finalize)后立即收到SQLITE_BUSY。进程 #2 仍然使用连接,没有任何问题。
我没有任何未关闭的事务,我没有对数据库进行任何长时间的操作。还有什么可能导致这种情况?
我在进程内的多个线程中使用相同的 SQLite 连接。 SQLite 文档说配置选项SQLITE_CONFIG_SERIALIZED 可以。这条规则有什么例外吗?
【问题讨论】:
-
我不确定
SQLITE_CONFIG_SERIALIZED的用处;在我看来,使用它,共享数据库的线程将踩踏彼此的事务。通常这样做的方式是为每个线程提供自己的连接,这具有更合理的语义。
标签: c++ windows multithreading sqlite