【问题标题】:Database lock Sqlite multiple Threads数据库锁Sqlite多线程
【发布时间】:2013-03-01 20:49:35
【问题描述】:

我正在使用 SQLite 数据库编写 C# 应用程序,有时会在输出日志中收到消息:Database Locked(5)。我不希望这种情况发生,我知道对我的数据库执行的多个操作会给我这个异常。

问题:

有没有办法查看 SQLiteDatabase 是否正忙于处理其他查询?

【问题讨论】:

    标签: c# database visual-studio sqlite


    【解决方案1】:

    如果您正在创建多线程应用程序,拥有您要求的知识不会解决任何问题。它们可能会使它们出现的频率降低,但偶尔您会看到与以前相同的问题。

    为什么?因为从你问“你被锁了吗?”的那一刻起到你说“在那种情况下,让我锁定你做某事”的那一刻,另一个线程可能已经跳进来锁定它。

    除非您遇到超时,否则我会处理异常并确定每种情况下要做什么。

    此外,由于 SQLite 本质上是一个单用户(而不是个人用户,而是“使用数据库的东西”中的用户)数据库,您可能会认为这不会成为错误的工具工作。

    【讨论】:

    • 感谢您的回答,不,它是我的应用程序几乎完美的数据库,我想我需要使用 bool 来检查某些东西是否只是试图向数据库发送查询,并且在那一刻,我可以使用该布尔值来防止其他线程向数据库发送查询,一个问题,当布尔值再次设置为:busy = false 时,它​​应该立即执行“任务”(查询的到数据库)有时间的时候。有什么方法可以使用while循环来实现吗?
    • 您正在寻找的是比较和交换。 C# 在 Interlocked 类中有一个 msdn.microsoft.com/en-us/library/801kt583%28v=vs.110%29.aspx 您可以使用的另一件事是 Mutex
    猜你喜欢
    • 2013-07-17
    • 2022-10-06
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多