0

質問:同じSqliteデータベースにアクセスする2つの別々のスレッド間の潜在的な競合をどのように処理できますか?

背景:ADO.net経由でSqliteを使用するC#Winformsアプリケーションがあります。私はwinformsアプリケーションにbackgroundworkerスレッドを持っています。メインスレッドとバックグラウンドワーカースレッドの両方がsqliteデータベースを更新しようとすると、つまりDBDataAdaptor.Update()を呼び出すと、例外が発生する可能性があることに気付きました。

だから私は自分のコード(メインスレッドコードやbackgroundworkerで実行されるコード)をチェックして、事前にチェックするか、OKになるまでブロックするか、特定のエラーを発生させることで、これを適切に処理することに興味があります..。。

ありがとう

4

1 に答える 1

1

SQLITE_BUSYsqliteでは、SQLITE_IOERR_BLOCKEDエラーが発生したときにトリガーされるコールバックを構成できます( http://www.sqlite.org/c3ref/busy_handler.htmlを参照)。

ほとんどの場合、ビジー状態でスリープしてクエリを再試行する必要があるため、sqliteにはまさにそれを実行するコールバックが組み込まれています。http://www.sqlite.org/c3ref/busy_timeout.htmlで読んsqlite3_busy_timeoutください

于 2010-03-22T07:01:49.753 に答える