gpt4 book ai didi

windows - Windows 上的 SQLite DB 像互斥锁一样锁定且无需轮询

转载 作者:可可西里 更新时间:2023-11-01 09:37:48 25 4
gpt4 key购买 nike

我有以下情况:一个进程正在从 SQLite 数据库中读取数据。另一个进程正在更新数据库。更新不会经常发生,所有交易都很短。 (平均小于0.1ms)正在读取的进程对于查询应该具有低延迟。 (大约 0.1 毫秒)

如果 SQLite 的锁定像互斥锁或读写锁一样工作,一切都会好起来的。来自阅读http://www.sqlite.org/lockingv3.html这应该是可能的。 SQLite 正在使用LockFileEx(),有时没有 LOCKFILE_FAIL_IMMEDIATELY,这会阻止调用根据需要进行处理。

但是我不知道如何使用/配置 SQLite 来实现此行为。使用忙处理程序会涉及轮询,这是 Not Acceptable ,因为 Windows 上的最短 sleep 时间通常为 15 毫秒。我希望在更新事务结束后立即执行查询。

这是否可以在不更改 SQLite 源代码的情况下实现。如果没有,是否有这样的补丁可用?

最佳答案

SQLite 不使用只等到锁被释放的同步机制。SQLite 从不使用阻塞锁定调用;当它发现数据库被锁定时,等待一段时间并重试。(您可以安装自己的 busy handler 以等待更短的时间。)

防止读者和作者相互阻塞的最简单方法是使用WAL mode。 .

如果你不能使用 WAL 模式,你可以通过实现你自己的同步机制来同步你的事务:使用一个通用的 named mutex在所有流程中,并将其锁定在您的所有交易中。(如果您有多个读者,这会降低并发性。)

关于windows - Windows 上的 SQLite DB 像互斥锁一样锁定且无需轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199512/

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