经过一番研究,我发现SQLite将处理concurrent read。但是在我尝试创建多线程并同时读取SQLite之后,它将在sqlite3_get_table上崩溃。但如果我使用序列化模式,那将完全没问题。为什么会这样?我误解了什么吗?
以下是我阅读数据的方式:
ret = sqlite3_get_table(db, sql, &results, &rows, &columns, &err_msg);
if (ret != SQLITE_OK) {
// error handling
}
if (rows < 1) {
// error handling
}
else {
// reading data
}
sqlite3_free_table(results);
我还可以在sqlite3_get_table周围添加锁定/解锁来解决问题。但是为什么我不能在没有锁定的情况下调用这个函数呢?
答案 0 :(得分:0)
链接的答案讨论了来自多个进程的并发访问。
只要每次访问都通过自己的连接,并发访问就完全没问题了。 (允许读取,写入正确锁定。)
您的程序应该为每个线程使用一个连接。