multithreading - 在不同平台上使用 sqlite 和文件锁定是否存在已知问题?

标签 multithreading sqlite file-io cross-platform

我正在使用 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/

相关文章:

android - Sqlite:根据距离(纬度和经度)选择项目

c - 读取大数据时有没有比 fscanf 更快的方法

assembly - 使用打印宏时,TASM 写入标准输出与写入文件行为差异

perl - 如何在 FreeBSD 7.1 下编译具有线程支持的 Perl 5.10?

java - 守护线程实现

c# - BackgroundWorker OnWorkCompleted 抛出跨线程异常

java - 1 java内存刷新 volatile : A good programdesign?

c - 当我运行这个非常基本的基于 SQLite3 的 C 文件时,为什么我总是得到 "Killed: 9"?

sql - 在多个联接记录中进行SQL字符串搜索

c - 临时数据存放在哪里(嵌入式C)