回覆列表
  • 1 # 使用者1677478841503

    SQLite作為一款小型的嵌入式資料庫,本身沒有提供複雜的鎖定機制,無法內部管理多路併發下的資料操作同步問題,更談不上最佳化,所以涉及到多路併發的情況,需要外部進行讀寫鎖控制,否則SQLite會返回SQLITE_BUSY錯誤,以駁回相關請求。

    返回SQLITE_BUSY主要有以下幾種情況:

    1。當有寫操作時,其他讀操作會被駁回

    2。當有寫操作時,其他寫操作會被駁回

    3。當開啟事務時,在提交事務之前,其他寫操作會被駁回

    4。當開啟事務時,在提交事務之前,其他事務請求會被駁回

    5。當有讀操作時,其他寫操作會被駁回

    6。讀操作之間能夠併發執行

    可以設計如下的方案解決併發操作資料庫被鎖定的問題,同時保證讀操作能夠保持最大併發

    1。採用互斥鎖控制資料庫寫操作

    2。只有擁有互斥鎖的執行緒才能夠操作資料庫

    3。寫操作必須獨立擁有互斥鎖

    4。讀操作必須能夠共享互斥鎖,即在第一次讀取的時候獲取互斥鎖,最後一次讀取的時候釋放互斥鎖

    http://blog.csdn.net/bestrem_9/article/details/6322916

  • 中秋節和大豐收的關聯?
  • 有些事情我們年輕的時候不懂,當我們懂得的時候已不再年輕?