Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SQLite多线程互斥_C++_Multithreading_Sqlite - Fatal编程技术网

C++ SQLite多线程互斥

C++ SQLite多线程互斥,c++,multithreading,sqlite,C++,Multithreading,Sqlite,我在C++应用中使用SQLite。SQLite线程模式被设置为多线程,以便允许多个共享单个数据库连接的线程。在这个场景中,我是否需要包装数据库操作,如下所示?或者这不是必需的 void SomeClass::someDbOperationOnAThread(void *arg) { sqlite3_mutex_enter(sqlite3_db_mutex(db)); // Perform some queries on the database sqlite3_mutex

我在C++应用中使用SQLite。SQLite线程模式被设置为多线程,以便允许多个共享单个数据库连接的线程。在这个场景中,我是否需要包装数据库操作,如下所示?或者这不是必需的

void SomeClass::someDbOperationOnAThread(void *arg) {
    sqlite3_mutex_enter(sqlite3_db_mutex(db));
    // Perform some queries on the database
    sqlite3_mutex_leave(sqlite3_db_mutex(db));
}
报告说:

  • 多线程。在这种模式下,只要两个或多个线程中没有同时使用单个数据库连接,多个线程就可以安全地使用SQLite
  • 因此,不能对多个线程使用单个连接

    在任何情况下,单个连接只能有一个事务,因此最好为每个线程都有一个单独的连接

    报告说:

  • 多线程。在这种模式下,只要两个或多个线程中没有同时使用单个数据库连接,多个线程就可以安全地使用SQLite
  • 因此,不能对多个线程使用单个连接


    在任何情况下,单个连接只能有一个事务,因此最好为每个线程都有一个单独的连接

    谢谢@CL。那么,假设多个线程都有自己的数据库连接,那么,该操作是否仍然有互斥体?什么互斥体?互斥锁能保护什么呢?正如你在我问题的代码片段中看到的互斥锁。受保护的是某个类的成员属性,比如说,一个从INSERT返回的值(例如,最后一行ID)。使用
    sqlite3\u db\u mutex()
    ,每个线程都有自己的互斥体,因此这是毫无意义的。(无论如何,在多线程模式下,返回NULL。)多线程可以支持同时写入数据库吗?谢谢@CL。那么,假设多个线程都有自己的数据库连接,那么,该操作是否仍然有互斥体?什么互斥体?互斥锁能保护什么呢?正如你在我问题的代码片段中看到的互斥锁。受保护的是某个类的成员属性,比如说,一个从INSERT返回的值(例如,最后一行ID)。使用
    sqlite3\u db\u mutex()
    ,每个线程都有自己的互斥体,因此这是毫无意义的。(无论如何,在多线程模式下,返回NULL。)多线程可以支持同时写入数据库吗?