我有2个进程:1个是写入sqlite数据库,1个是从同一个数据库读取。偶尔,我会在我的selects中获得SQLITE_BUSY。这是正常的吗?有没有什么办法可以让我打开数据库,这样它就会阻塞,直到完成查询?(我在open调用上尝试了FULLMUTEX选项,但似乎没有效果)。
发布于 2010-05-21 09:04:19
当SQLite需要写入时,它会锁定整个数据库,这样其他线程/进程就无法对其进行读写。这就是为什么你的另一个进程会得到SQLITE_BUSY。因此,如果您需要同时有多个线程/进程使用数据库,那么SQLite并不是很好。如果您只有两个进程,那么您可能不会受到影响。
关于问题的第二部分,您可以使用sqlite3_busy_timeout函数告诉SQLite重试,如下所示:
sqlite3_busy_timeout(db, 100); /* Retry for up to 100 ms */https://stackoverflow.com/questions/2878593
复制相似问题