繁体   English   中英

sqlite:检查读/写锁

[英]sqlite: check reader/writer lock

我有两个访问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_handler)以及一个繁忙的超时(sqlite3_busy_timeout),这将在x毫秒后重试写入。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM