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