したがって、独自のロックメカニズムを実装しようとしています。あなたにアイデアを与えるはずのデッドロックの問題を軽減する方法をご覧ください。基本的に、通知またはスタンプを使用してロックの所有者ステータスを追跡し(ロックが無効であるか、リソースをまだ使用している場合)、リソースの枯渇を防ぎます。
要求された例
2人のユーザーがいます。ユーザーAとユーザーB。
ユーザーAがアプリ内でビューを開くと、次の2つのことが起こります。
- DBを更新し、スタンプを現在の時刻に設定します。
- ロックを維持する責任がある新しいバックグラウンドスレッドを開始します。このバックグラウンドスレッドはN-Deltaを待機する必要があります。ここで、Nはリソースを更新せずにロックできる最大分であり、deltaは更新時間のデルタです。したがって、たとえば、ユーザーの操作なしでビューを最大15分間ロックできるとすると、スレッドは15-1待機する必要があります(DBに「今回は注意が必要です」と通知するのにおそらく1分かかります)。
次に、ユーザーBがそのビューにアクセスしようとします。データベースでリソースとロックテーブルを確認し、15分から時間が経過していないビューにロックがある場合は、アクセスを拒否します。ただし、時間が15分を超える場合は、ユーザーBにアクセスを許可し、ユーザーAからアクセスを削除します。
ユーザーAまたはユーザーBのいずれかがビューを正常に閉じた場合は、DBから入口を削除するだけです。
これは非常に単純な例ですが、私が何を意味するのかがわかるはずです。