sqlite - 同じデータベースにアクセスする 2 つの別個のスレッド間で潜在的な競合を処理するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2490432

  •  21-09-2019
  •  | 
  •  

質問

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

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

したがって、事前にチェックする方法、OKになるまでブロックする方法、またはキャッチできる特定のエラーを発生させる方法のいずれかを介して、これを適切に処理するためにコード(メインスレッドコードおよび/またはバックグラウンドワーカーで実行されるコードであっても)をチェックするものに興味があります。 ...

ありがとう

役に立ちましたか?

解決

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

ほとんどの場合、やりたいことはスリープしてビジー時にクエリを再試行することなので、sqlite にはまさにそれを行うコールバックが組み込まれています。よく読んで sqlite3_busy_timeouthttp://www.sqlite.org/c3ref/busy_timeout.html.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top