【发布时间】:2009-08-20 10:51:13
【问题描述】:
在写入 SQLite 数据库时是否可以读取它?
我知道写入时会阻止写入访问,但读取时是否相同?
【问题讨论】:
标签: iphone sqlite readwritelock
在写入 SQLite 数据库时是否可以读取它?
我知道写入时会阻止写入访问,但读取时是否相同?
【问题讨论】:
标签: iphone sqlite readwritelock
这有点令人费解,但请查看File Locking and Concurrency documentation for SQLite。听起来如果数据库处于exclusive 锁定模式,那是唯一不允许读取的时间。除了解锁之外,当数据库甚至没有打开时。
我不是 100% 确定,但我认为就是这个意思。
【讨论】:
经过一番阅读,并查看了 FMDB 代码,我发现我没有正确使用 SQLITE_BUSY 和 SQLITE_LOCKED 返回值。
根据 FMDB 代码,应该循环进行有限次数的重试,然后等待一小段时间。
所以我在我的代码中实现了这一点,一切似乎都运行良好。
【讨论】:
是的,尽管需要考虑所有相关的多线程问题。我通常通过 sqlite3_open_v2() 打开同一个数据库文件的多个句柄。
【讨论】: