2011-11-01 8 views
5

私のアプリケーションは、数多くのスレッドによってアクセスされるSQLiteDatabase内のすべてのデータを管理します。現在のスレッドのSQLiteテーブルをロックすることはできますか?

今私はすべてのDB呼び出しをデータベース自体で同期させています。

私がこれをやりたい理由は、時々、サーバーから最新のバージョンを取得し、テーブルを最初から再構築することによってテーブルを更新したいということです。時間を節約するために、私は実際に2番目のテーブルを作成しています。

問題は、(同期ロックのために)長い間SQL呼び出しが停止することがあります。または、SQL呼び出しが1つのテーブルがコピーされている間に短期間に自分自身を実行しようとするとエラーが発生します。以上。

データベースをリフレッシュ中に他の操作からロックすることはできますが、操作A、B、Cなどを同時に実行することはできますか?

乾杯!

答えて

0

私はかなりあなたが欲しいものはReadWriteLockであると確信しています。基本的には、データベースに2つの異なるロックを設定します.1つは読み取り用、もう1つは書き込み用です。書き込みロックがロックされている間は、誰も読み取りも書き込みもできません。読み取りロックのいずれかが(任意の数のスレッドによって)ロックされている場合、書き込みロックは誰もが読み終わるまでロックすることができません。

+0

Yup!これはまさに私が探していたものです!私がやっていたことを同期させるよりずっと優れています。ありがとう! :) – isep

+0

@isepこんにちは、私は複数のスレッドで作業する必要があるBlack Berry Developingで問題を抱えていました。データベースのオープンとクローズ、挿入、更新、削除にアクセスしていますので、 BBの例ですが、今はデータベースのオープンとクローズを追跡する作業をしました。 – Herry

関連する問題