我在amd64/ubuntu上使用sqlcipher 2.1.1/sqlite 3.7.17。
两个进程有到同一数据库的开放连接。两个进程都可以启动事务,事务在进程内序列化,但可能在两个进程之间并发发生。所有事务都是独占的:[ret=sqlite3_exec(db,“begin exclusive transaction”,null,null,null);]。
我在Linux上(而在使用SQLite 3.6.22的Windows上则不然)发现,这些调用成功,并返回SQLite_ok,即使其他进程之前已经执行了相同的操作,但尚未发出提交或回滚,也就是说,仍然应该保留数据库上的排他锁。因此,我在应用程序中的整个数据库锁定策略都乱套了。
我遇到的是sqlcipher/sqlite库构建问题吗?
我不明白“独家交易”是什么意思吗?
谢谢你事先的提示或帮助,
比塔L

最佳答案

如果还有人想解决我的问题:
我发现,将锁从“unix”更改为“unix dotfile”似乎会使进程间独占事务行为正常。到目前为止,我最好的猜测是,加密扩展正在干扰默认的“unix”db锁定,这需要确认。

关于linux - 为什么sqlite独占交易不尊重linux上的独占?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20373848/

10-10 03:51