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
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