SQLite并发read - sqlite3_get_table

时间:2018-04-19 10:11:32

标签: sqlite

经过一番研究,我发现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周围添加锁定/解锁来解决问题。但是为什么我不能在没有锁定的情况下调用这个函数呢?

1 个答案:

答案 0 :(得分:0)

链接的答案讨论了来自多个进程的并发访问

只要每次访问都通过自己的连接,并发访问就完全没问题了。 (允许读取,写入正确锁定。)

您的程序应该为每个线程使用一个连接。