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

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

查資料後發現, 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}
相關文章
相關標籤/搜索