分散デッドロック有料宝物転送

デッドロック

仕様定義デッドロック:プロセスのセットの各々は、このコレクションにのみ他のプロセスによってイベントを待って、その後の処理のセットがデッドロックされ、トリガすることができます。大まかに言えば、ここでの処理は、実行単位をいいます。

問題の説明

[A]は、以下のように[B]口座振替500、プログラムの転送ロジックであるアカウントに仮定されます。

  1. オープン情勢
  2. [A]口座残高マイナス500元
  3. [B] 500元の口座残高の増加
  4. トランザクションをコミットします

クラスタ環境では、server1上の、server2のサービスは、決済モジュールを展開している、次のシナリオでは、環境中に発生する可能性があります。

アカウントは、[A] [B]に口座振替500をserver1上の実行、
実行、[B]は[A]アカウント転送500サーバ2のアカウント、
二つ以上の転送は、最初のロジックに実行を転送する、同時に実行される動作しますロックにアカウントをロックするための3つのステップ、[B]のためSERVER1要求、[A]のアカウントサーバ2の要求、この場合ので、[A]は、サーバ1がロックされ占めるとき、[B]はアカウントサーバ2となってロックは、それはデッドロックを生成します。

ソリューション

並行プログラミングでは、私たちはしばしば問題を注文、三つの問題の原子の問題、問題の可視性に遭遇します。
、[B]はアカウントであるアカウント[A]、[B]を実行するの転送の過程で、我々は見つけることができ、問題の上記の説明を通して順序付けされるアカウントが、実行過程で複数の転送は、[A]を占め順不同。並行プログラミング同様の問題を注文する問題は、我々は次のように変更することで問題を解決することができます。

ソートすべてのシステムにアカウント:
[アカウントA]、[B]のアカウント、アカウント[C]、[D]のアカウント、アカウント[E]、[F]アカウント

[A]アカウントB SERVER1上の[$ 500]転送ロジックに実行アカウント:

  1. オープン情勢
  2. [A]口座残高マイナス500元
  3. [B] 500元の口座残高の増加
  4. トランザクションをコミットします

[B]は[A]を実行するアカウントサーバ2 $ 500の転送論理上のアカウント:

  1. オープン情勢
  2. [A] 500元の口座残高の増加を
  3. [B]口座残高マイナス500元
  4. トランザクションをコミットします

アカウントは、あなたがデッドロックの問題を避けることができますので、口座振替のプロセス[B]の[A]常にが占めていることを確認するためにソートされています。

ソリューションの多くがありますが、私はここだと思うだけで、比較的簡単なプログラムを提示するだけでなく、スキームティアインターネット企業も広く使用されています。

デッドロック防止プログラム

1.デッドロック防止に必要な条件原因デッドロックは真実ではありませんように
-リソースの種類、リソースアプリケーションのシーケンスに従って
-すべての同時トランザクションが識別子または時間の始まりでソートされます
トランザクションは、中止されたリソースが占有されているがある場合、デッドロックの危険性-二つの方法:
待機-死:若い業務を再開し、より多くの高齢者の業務のために待機していたリソースを保持するが、若い情勢が
負傷した-待機中:若い古い、若い、再起動を待って、トランザクションを再起動することではありません必見総務は、現在係属中です

2.デッドロック検出
-デッドロックリングを待っている検出ループ

正しくない、歓迎批判場合は、上記のは、個人的な要約です。

公開された54元の記事 ウォン称賛28 ビュー4220

おすすめ

転載: blog.csdn.net/qq_37174887/article/details/102936616