gpt4 book ai didi

c++ - sqlite:检查读写器锁

转载 作者:太空狗 更新时间:2023-10-29 22:52:30 24 4
gpt4 key购买 nike

我有 2 个进程都访问 sqlite3 数据库。虽然读取在 sqlite 中不是问题,但只有一个进程可以写入数据库。根据常见问题: http://www.sqlite.org/faq.html#q5 sqlite 使用读/写锁。

如何从 python 和 c++ 检查数据库是否被另一个进程锁定以进行写入?

[编辑]我的意思是执行查询是一个选项,但它需要性能取决于查询。所以问题也是我使用什么类型的查询来最小化这种影响。我也想自己锁定/解锁数据库。

最佳答案

当 SQLite 试图访问一个锁定的数据库时,它的默认行为是返回 SQLITE_BUSY。该文档描述了向该事件添加自定义处理的方法:http://www.sqlite.org/faq.html#q5 .

我从文档中了解到,您调用的任何试图写入此锁定数据库的函数都只会返回 SQLITE_BUSY,这将是您通知数据库已锁定。

如果您担心执行无法完成的写入,您可以结合繁忙超时 (sqlite3_busy_timeout) 实现繁忙处理程序回调 (sqlite3_busy_handler),这将在 x 毫秒后重试写入。

[编辑]http://www.sqlite.org/c3ref/io_methods.html ,它提到了一个函数指针结构,其中一个是 xCheckReservedLock(),如果文件被锁定,它会返回 true。在这个结构中是所有其他锁相关的功能。我不确定从 sqlite 库外部访问这些,但可能值得研究。我想你是通过这个界面来做的:http://www.sqlite.org/c3ref/file_control.html

关于c++ - sqlite:检查读写器锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4153091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com