多线程模式下的sqlite3:执行什么是不安全的?

时间:2016-02-21 00:02:55

标签: c++ c multithreading sqlite

SQLite documentation article on multithreading我得到多线程模式“ SQLite可以被多个线程安全地使用,条件是两个或更多个线程不同时使用单个数据库连接线程”。

但它没有解释:在这种模式下,在两个或多个线程中同时执行是不安全的?除了明显的CREATE,INSERT,UPDATE,DROP等查询修改数据库,

  1. 同时执行SELECT会不安全吗?
  2. 那么使用语句(sqlite3_stmt)呢?如果它们与同一个数据库连接,同时使用它们也不安全吗?特别是:

    1. 准备陈述(sqlite3_prepare_v2)
    2. 绑定值(sqlite3_bind *)
    3. 清除绑定(sqlite3_clear_bindings)
    4. 重置语句(sqlite3_reset)
    5. 在不同的线程中打开/关闭到同一数据库的新连接(sqlite3_open_v2,sqlite3_close_v2)

1 个答案:

答案 0 :(得分:1)

根据我的理解,在多线程模式下,来自两个或多个线程的sqlite3对象上的任何操作都是危险的。同样适用于sqlite3_stmt个对象,因为它们是“{1}}对象的一部分。”

但是,即使在不同的进程中,您也可以(并且通常会)与同一数据库建立多个sqlite3连接。 SQLite将管理它们之间的并发性。