2フェーズロックは、ロックフェーズ中にロックをアップグレードできます。しかし、私は次の例がT1とT2がデッドロックであると言った理由を知らない。 read_lock(x)がwrite_lock(x)にアップグレードできないのはなぜですか?2フェーズロックトランザクションのデッドロック
0
A
答えて
2
T1とT2は、互いの完全異なる、全く気付かなプロセスであるので、それらは、であるべきです。
T2プロセスがの場合でも、「読み取りロックをXにアップグレードする」場合でも、T1に何が起こるかについては何の違いもありません.XのT2ロックが解除されるまで待機する必要があります。
そこで我々はまだT1がT2を待っている、と我々はまだT2 がT2だから我々はまだ待っている両方のプロセスを有するY.
へのロックを取得しようとする時点でT1待っ開始に備えていますもう一方はロックを解除します。デッドロック。あなたはT1とT2の両方に語る第三成分「ロックマネージャ」で描く場合
EDITはおそらく、問題を理解することが少し簡単です。このロックマネージャコンポーネントが通過する状態は、「ロックなし」、「Y上のT1によって保持される読み取りロック」、「Y上のT1によって保持される読み取りロック、およびX上のT2によって保持される読み取りロック」である。
最初にLock ManagerがX上のT1によるロック要求を拒否するように強制する後者のビットと、YでLock ManagerをT2にロック要求を拒否させる前のビット
関連する問題
- 1. C#MS-SQL 2012のデッドロックのデッドロック
- 2. デッドロック
- 3. existingObjectWithID NSPrivateQueueConcurrencyTypeのデッドロック
- 4. デッドロックの作成
- 5. ゴルーチン間のデッドロック
- 6. スレッドのデッドロックjava
- 7. デッドロックの履歴
- 8. System.Diagnostic.Processのデッドロック
- 9. MTSレプリケーションのデッドロック
- 10. Scalaのデッドロック
- 11. スレッドセーフキューのデッドロック
- 12. フェイルオーバーロードバランサのデッドロック
- 13. のJavaデッドロックが
- 14. MPIのデッドロック
- 15. GraphEngineのデッドロック
- 16. c3p0 Hibernateのデッドロック
- 17. ScalaのForeachデッドロック
- 18. SQLデッドロックの例
- 19. PHPセッションファイルのデッドロック
- 20. pthread_cond_signalデッドロック
- 21. NSManagedObjectContextデッドロック
- 22. __syncthreads()デッドロック
- 23. NSConditionデッドロック
- 24. postgresqlデッドロック
- 25. ベーカリーアルゴリズム(デッドロック?)
- 26. ワーキングプールのチャネルのデッドロック
- 27. サードパーティのDLLのデッドロック
- 28. 同じ行を2回ロックするためのMySQL 5.6デッドロック?
- 29. ehcache 2.9.0のEhcacheデッドロック
- 30. golangデータベース/ sqlのデッドロック