1

私には2つのプロセスがあります:

  1. 毎秒2つのテーブルに書き込みます(ish)
  2. 上記のテーブルから定期的に読み取ります

SQLiteを使用すると、書き込みによってデータベース全体がロックされるため、データベースがロックされていると2番目のプロセスが失敗することがあります。

これらの2つのプロセスが同じデータベースにアクセスする必要性を完全に排除することを提案できるものはありますか?たとえば、書き込まれているデータベースから2番目の読み取り専用データベースにデータをアトミックに転送できますか?

ありがとう :)

4

2 に答える 2

2

2番目のプロセスでデータベースへの接続を構成して、ビジー状態のデータベースに遭遇したときに一定時間待機し、定期的にウェイクアップして空きデータベースを確認してから、あきらめることができます。

sqlite3_busy_timeout(sqlite3*, int ms);

http://www.sqlite.org/c3ref/busy_timeout.html

于 2010-02-25T03:16:53.083 に答える
0

SQLiteスレッドセーフに関するFAQを読むことをお勧めしますか?

スレッドは邪悪です。それらを避けてください。

SQLiteはスレッドセーフです。多くのユーザーが前の段落で与えられたアドバイスを無視することを選択するので、私たちはこの譲歩をします。ただし、スレッドセーフにするために、SQLiteはSQLITE_THREADSAFEプリプロセッサマクロを1に設定してコンパイルする必要があります。

于 2010-02-25T02:41:08.123 に答える