代码之家  ›  专栏  ›  技术社区  ›  Greg

sqlite-如何处理访问同一数据库的两个独立线程之间的潜在争用?

  •  0
  • Greg  · 技术社区  · 15 年前

    问题:如何处理访问同一个sqlite数据库的两个独立线程之间的潜在争用?

    背景:我有一个C winforms应用程序,它通过ado.net使用sqlite。我在winforms应用程序中有一个backgroundworker线程。我注意到,当主线程和后台工作线程都试图更新sqlite数据库(即调用dbdataadapter.update())时,我会得到一个异常。

    因此,我对检查我的代码(尽管主线程代码和/或在BackgroundWorker中运行的代码)以优雅地处理这一问题感兴趣,可以通过预先检查的方式,也可以阻止直到确定,或者引发我可以捕获的特定错误…

    谢谢

    1 回复  |  直到 12 年前
        1
  •  1
  •   Jonathan Hall    12 年前

    在sqlite中,可以配置当遇到 SQLITE_BUSY SQLITE_IOERR_BLOCKED 错误(请参见 http://www.sqlite.org/c3ref/busy_handler.html )

    由于大多数情况下,您希望做的是睡眠,并在繁忙时重试查询,因此sqlite有一个内置回调,可以做到这一点;请阅读 sqlite3_busy_timeout http://www.sqlite.org/c3ref/busy_timeout.html .