我有2个进程:1是写入sqlite数据库,1是从同一个数据库读取。偶尔,我会选择SQLITE_BUSY。这是正常的吗?是他们的一些选择或方式我可以打开数据库,以便它阻止,直到它可以完成查询? (我在公开呼叫中尝试了FULLMUTEX选项,但似乎没有效果)。
答案 0 :(得分:2)
当SQLite需要编写时,它会锁定整个数据库,因此没有其他线程/进程可以读取或写入它。这就是你的其他进程得到SQLITE_BUSY的原因。因此,如果您需要同时使用数据库的多个线程/进程,SQLite并不是那么好。如果你只有两个进程,你可能会侥幸逃脱它。
关于问题的第二部分,您可以告诉SQLite使用sqlite3_busy_timeout函数重试,如下所示:
sqlite3_busy_timeout(db, 100); /* Retry for up to 100 ms */