2015-07-21 33 views
1

我有一個程序用線程(根據用戶請求)處理數據庫。雖然存在一個問題:SQLite3線程安全的last_insert_rowid API(C++)

儘管不太可能,但例如在將用戶插入數據庫(他的詳細信息)並且我想要查找其標識符列值(int)時可能會出現問題,使用sqlite3_int64 sqlite3_last_insert_rowid(sqlite*);函數。

即使API一般是線程安全的,因爲我研究儘可能多的 - 如果可能另一個線程插入一行到相同的表我插入我的出現問題,但之前我叫sqlite3_last_insert_row_id()。我如何防止這種情況?我可以互斥所有數據庫訪問權限,但在目前階段這會很麻煩,這是唯一的方法嗎?

我也可以做一個事務sql查詢,但會有我想要的相同效果?

回答

0

爲了防止多個線程互相干擾,應該爲每個線程使用事務和一個數據庫連接。

如果你真的想共享線程之間的相同連接,你需要一個互斥鎖。