解決sqlite3多進程訪問下會出現database lock錯誤


查詢sqlite3官方網站得知sqlite3支持多個進程訪問同一個數據庫文件, 但是實際測試下來發現執行語句報SQLITE_LOCKED錯誤

查資料后發現, sqlite默認發現數據庫locked后不會等待, 重試, 而是直接返回錯誤。 

解決辦法1: 在執行語句前后設置全局sem(信號量), 確保語句順序執行

解決辦法2: 利用sqlite3自帶的timeout_handler(需要先確保sqlite3打開了threadsafe)

assert(sqlite3_threadsafe());  //make sure sqlite was compiled with threadsafe option
...
sqlite3* db = NULL;
int rc = sqlite3_open(DATA_DB_NAME, &db);
if (rc == 0) {
  //open successful
  sqlite3_busy_timeout(db,
30000);  //set timeout_handler
} else {
  //open failed
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM