查詢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
}
