2016-08-20 163 views
1

我在我的C++應用程序中使用SQLite。 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)); 
} 

回答

0

documentation說:

  • 多線程。在這種模式下,如果兩個或多個線程中沒有同時使用單個數據庫連接,則SQLite可以安全地用於多個線程。
  • 所以你不能使用單個連接進行多線程。

    在任何情況下,一個連接只能有一個事務,因此爲每個線程分別建立一個連接會更好。

    +0

    Thanks @CL。 。所以,說多個線程有自己的連接到數據庫,那麼,如果操作仍然有互斥體? – KBancho

    +0

    什麼互斥量?那麼互斥體會保護什麼? –

    +0

    互斥體,你在我的問題的代碼片段中看到。 SomeClass的成員屬性,比方說,從INSERT返回的值(例如,最後一行ID)將被保護的是什麼。 – KBancho