2016-11-11 17 views
0

は、トランザクションAとBは両方として実行する場合:レルムMVCCの動作レルムで

は、「第一」として最初のアイテムを取る=>ないいくつかのロング操作は=>「初」

ウィル削除の実行:

  • トランザクションAとBは "First"と同じ値を取得しますか?
  • トランザクションそれが実行されている場合、ブロックトランザクションB「「最初に?

それはので、私はブロックにBの全体を望んでいる 『』、そしてBが実行され、異なる値を取得 『を書き込む第一』を、しかし、ロックがより細かく、Bが削除ステートメントに達するまでブロックされないように見えます。

これは、それらが別々のDBのコピーで実行されることを意味しますか? "First"と同じ値を持ち、互いに横に走っていると、AはすでにAを削除した後に "First"を削除しようとしているので投げますか?

答えて

0

トランザクションが互いにブロックします。 2つのRealmインスタンスを同時に「書き込み」モードにすることはできません。トランザクションが進行中の場合、他のスレッドのRealmインスタンスはブロックされ、他のトランザクションが完了するまで強制的に待機します。このため、UIスレッドのRealmトランザクションは推奨されません。

書き込みモードでは、Realmは常にリアルタイムの最新データを表示します。これは、データベースを修正してもRealmResultsがリアルタイムで更新されていたことを意味していました。 (これが起こらないという事実は、Javaバインディングでの「ハック」のようなものです)。

トランザクションAブロック実行時のトランザクションB最初?

これが勝ちます。