我正在使用APSW的VFS层为SQLite编写VFS:https://github.com/michalc/sqlite-memory-vfs,并尝试确保它允许安全地并发访问
我认为 xRead 和 xWrite 受 SQLite+VFS 锁定机制保护 - xRead 受 SHARED 锁保护,xWrite 受 EXCLUSIVE 保护。
但是:xFileSize 和 xTruncate 怎么样?这些是否也受到共享锁和独占锁的保护?询问是因为 VFS 中用于存储文件的底层数据结构是不是线程安全的。
经过一些测试,我只见过数据库的“-journal”文件上的 xFileSize 没有被共享锁包装,xTruncate 没有被 EXCLUSIVE 包装。
而且我认为 SQLite 主文件上的锁定机制可以保护这些。
诚然,这并不是铁证如山——只是证据。