sqlite多線程并發(fā) sqlite能不能多線程并發(fā)訪問?
sqlite能不能多線程并發(fā)訪問?作為一個小型嵌入式數(shù)據(jù)庫,SQLite不提供復雜的鎖定機制。它不能在內部管理多通道并發(fā)下數(shù)據(jù)操作的同步,更不能進行優(yōu)化。因此,當涉及到多通道并發(fā)時,需要外部讀寫鎖控制
sqlite能不能多線程并發(fā)訪問?
作為一個小型嵌入式數(shù)據(jù)庫,SQLite不提供復雜的鎖定機制。它不能在內部管理多通道并發(fā)下數(shù)據(jù)操作的同步,更不能進行優(yōu)化。因此,當涉及到多通道并發(fā)時,需要外部讀寫鎖控制,否則SQLite會返回SQLiteBusy錯誤來拒絕請求。
返回SQLiteuuBusy主要有以下幾種情況:
1。當有寫操作時,其他的讀操作將被拒絕
2。當有寫操作時,其他寫操作將被拒絕
3。當事務被打開時,在事務被提交之前,其他寫操作將被拒絕
4。當一個事務被打開時,在提交該事務之前,其他事務請求將被拒絕
5。當有讀操作時,其他寫操作將被拒絕
6?;谝陨嫌懻?,我們可以看出這是一個典型的讀者-作者問題。讀操作應該是共享的,寫操作應該是互斥的,讀操作和寫操作也應該是互斥的
可以設計以下解決方案來解決并發(fā)操作數(shù)據(jù)庫的鎖定問題,并保證讀操作可以保持最大的并發(fā)性
1。互斥用于控制數(shù)據(jù)庫寫入操作。只有具有互斥的線程才能操作數(shù)據(jù)庫
3。寫操作必須與互斥無關
4。讀取操作必須能夠共享互斥鎖,即在第一次讀取時獲取互斥鎖,在最后一次讀取時釋放互斥鎖http://blog.csdn.net/bestrem9/文章/細節(jié)/6322916