2013-03-01 60 views
3

我正在用SQLite數據庫編程C#應用程序,有時我在輸出日誌中收到消息:Database Locked(5)。我不希望這種情況發生,我知道對我的數據庫執行的多個操作會給我這個例外。數據庫鎖Sqlite多線程

問:

有沒有辦法,看看是否SQLiteDatabase忙於處理其他疑問?

回答

2

如果你正在創建一個多線程應用程序,有你所要求的知識不會解決任何問題。他們可能會讓他們看起來不太經常,但偶爾你會看到和以前一樣的問題。

爲什麼?因爲從你問到的那一刻起「你鎖定了嗎?」到你說「在這種情況下,讓我鎖定你做某事」的那一刻,另一個線程可能會跳入並鎖定它。

除非你得到一個超時,否則我會處理異常並決定在每種情況下要做什麼。另外,由於SQLite本質上是一個單用戶(並非用戶身份,而是用戶,如「使用數據庫的東西」)數據庫,所以您可能會認爲這不會成爲一種錯誤的工具工作。

+0

感謝您的回答,不,它是我的應用程序幾乎完美的數據庫,我想我需要使用布爾來檢查是否有東西只是試圖發送一個查詢到數據庫,並在目前,我可以使用這個bool來阻止其他線程向數據庫發送查詢,一個問題,當bool被設置爲類似的情況時:busy = false,它應該立即執行「Tasks」(查詢到數據庫)它有時間。任何方式來實現使用while循環? – Max 2013-03-01 12:47:00

+0

你在找什麼是比較和交換。 C#在Interlocked類中有一個http://msdn.microsoft.com/en-us/library/801kt583%28v=vs.110%29.aspx您可以使用的另一件事是一個Mutex – shimpossible 2013-12-19 23:39:38