C++ SQLite多线程互斥
我在C++应用中使用SQLite。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
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));
}
报告说:
在任何情况下,单个连接只能有一个事务,因此最好为每个线程都有一个单独的连接 谢谢@CL。那么,假设多个线程都有自己的数据库连接,那么,该操作是否仍然有互斥体?什么互斥体?互斥锁能保护什么呢?正如你在我问题的代码片段中看到的互斥锁。受保护的是某个类的成员属性,比如说,一个从INSERT返回的值(例如,最后一行ID)。使用
sqlite3\u db\u mutex()
,每个线程都有自己的互斥体,因此这是毫无意义的。(无论如何,在多线程模式下,返回NULL。)多线程可以支持同时写入数据库吗?谢谢@CL。那么,假设多个线程都有自己的数据库连接,那么,该操作是否仍然有互斥体?什么互斥体?互斥锁能保护什么呢?正如你在我问题的代码片段中看到的互斥锁。受保护的是某个类的成员属性,比如说,一个从INSERT返回的值(例如,最后一行ID)。使用sqlite3\u db\u mutex()
,每个线程都有自己的互斥体,因此这是毫无意义的。(无论如何,在多线程模式下,返回NULL。)多线程可以支持同时写入数据库吗?