我正在使用 sqlite 对专有文件进行索引,并且将使用多个线程(使用不同的 sqlite 句柄)访问数据库以进行读写。
我知道 sqlite 锁定文件是为了为读取器/写入器提供并发性,并且依赖于 OS 文件 api 进行锁定。
这在 windows 和 linux 上都很好,但是在 solaris 和 hpux 上,我对建议锁定在那里的工作方式不太有信心。
有谁知道 sqlite 在这些平台上的并发性如何工作?
最佳答案
根据我的经验(尽管基于有些过时的 SQLite 版本,即 3.0.x - 3.2.x),当存在某种争用时(即使它只是多个线程),您不希望依赖 SQLite 的默认锁定实现过程)。
主要问题是 SQLite 只是休眠了一会儿,然后如果文件已被锁定(直到忙等待超时到期),则再次尝试 - 这可能会导致应用程序中出现“数据库锁定”错误。除了 SQLite 自己的锁定之外,我实现的解决方法是使用我自己的锁定(在多线程进程中使用互斥锁)。
关于multithreading - 在不同平台上使用 sqlite 和文件锁定是否存在已知问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/768708/