在只读数据库上获取SQLITE_BUSY是正常的吗?

时间:2010-05-20 23:26:38

标签: c database sqlite

我有2个进程:1是写入sqlite数据库,1是从同一个数据库读取。偶尔,我会选择SQLITE_BUSY。这是正常的吗?是他们的一些选择或方式我可以打开数据库,以便它阻止,直到它可以完成查询? (我在公开呼叫中尝试了FULLMUTEX选项,但似乎没有效果)。

1 个答案:

答案 0 :(得分:2)

当SQLite需要编写时,它会锁定整个数据库,因此没有其他线程/进程可以读取或写入它。这就是你的其他进程得到SQLITE_BUSY的原因。因此,如果您需要同时使用数据库的多个线程/进程,SQLite并不是那么好。如果你只有两个进程,你可能会侥幸逃脱它。

关于问题的第二部分,您可以告诉SQLite使用sqlite3_busy_timeout函数重试,如下所示:

sqlite3_busy_timeout(db, 100);  /* Retry for up to 100 ms */