上一篇博客《sqlite:多線程操作數據庫“database is locked”解決方法》通過注冊延時函數的方法來處理數據庫被鎖的問題。此方法固然能解決問題,但是在多個線程向數據庫寫入大量數據的情況下,延時會拖慢進度。
想出方法二:
1. 創建一個鏈表,鏈接如下格式的結構體,線程1,線程2,線程3......不直接改寫數據庫,而是把sql語句插入鏈表中;
typedef struct {uint8_t *buf;uint32_t len;} sqlItem_t;
2. 創建一個獨立的線程,專職從鏈表中讀取sql語句,對數據庫進行改寫。
這樣只有一個線程對數據庫進行操作,數據庫被鎖的問題即可避免了,對數據庫的處理效率也大大提高。
3. 使用事務進一步提高sqlite處理性能
思路如下:
執行"begin transaction;"語句執行多條insert/update/delete/...語句執行"commit transaction;"語句
新聞熱點
疑難解答