SQLITE2.8.17 database is locked!
进程运行时,时常出现 database is locked 错误,查询官网文档,说的是由于递归调用sqlite_exec()函数引起的,未能明白怎么会出现这种情况。
进程有两个线程访问数据库,在访问的接口处加上了互斥量,代码如下:
pthread_mutex_lock (&query_mutex); int retv = sqlite2_query(conn, sql); //对sqlite_exec()的封装,统一到mysql的C语言API形式 if(0 != retv) { PRINT(SRC,LEVEL,"ERROR: %s, when %s!!!\n",DB_ERROR(conn),sql); DB_FREEERR(conn); //释放错误字符串 retv = ERR_DB_QUERY; sleep(1); //sleep(1) to slow down closely followed database calls } pthread_mutex_unlock (&query_mutex);int sqlite2_query(SQLITE2_CONN *conn,const char *sql){//error: non-zero, success: zero if(0 <= IsSQLType(sql,"select")) //SELECT SQL statement { return sqlite_get_table(conn->connection, sql, &conn->result.data,&conn->result.nrow, &conn->result.ncolumn,&conn->errmsg); } else //other SQL statements { return sqlite_exec(conn->connection,sql,0,0,&conn->errmsg); }}