2013-03-01 58 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