Heim >häufiges Problem >Notwendige Bedingungen für das Auftreten eines Deadlocks
Vier notwendige Bedingungen für einen Deadlock
Gegenseitige Ausschlussbedingungen: Die Ressource ist exklusiv und wird ausschließlich verwendet, und Prozesse nutzen Ressourcen gegenseitig. Eine Ressource kann immer nur von einem Prozess genutzt werden. Wenn sich andere Prozesse um eine Ressource bewerben und die Ressource von einem anderen Prozess belegt ist, wartet der Antragsteller, bis die Ressource vom Nutzer freigegeben wird. (Empfohlenes Lernen: MySQL-Video-Tutorial)
Nicht-Deprivationsbedingung: Die durch den Prozess erhaltenen Ressourcen werden nicht zwangsweise von anderen Prozessen entzogen, bevor sie aufgebraucht sind , aber nur Die Ressource kann von dem Prozess freigegeben werden, der die Ressource erhalten hat.
Anforderungs- und Aufbewahrungsbedingungen: Jedes Mal, wenn ein Prozess einen Teil der benötigten Ressourcen beantragt, belegt er weiterhin die zugewiesenen Ressourcen, während er neue Ressourcen beantragt.
Schleifenwartebedingung: Wenn ein Deadlock auftritt, muss eine Prozesswarteschlange {P1, P2, ..., Pn} vorhanden sein, in der P1 auf die von belegten Ressourcen wartet P2 und P2 warten auf die von P3 belegten Ressourcen. Pn wartet auf die von P1 belegten Ressourcen und bildet eine Prozesswarteschleife. Die von jedem Prozess in der Schleife belegten Ressourcen werden von einem anderen Prozess beantragt Gleichzeitig belegt der vorherige Prozess die vom letzteren Prozess belegten Ressourcen.
Oben sind die vier notwendigen Bedingungen aufgeführt, die zu einem Deadlock führen. Solange das System zum Deadlock führt, ist mindestens eine der oben genannten vier Bedingungen erfüllt. Tatsächlich impliziert die Einrichtung des Schleifenwartens die Einrichtung der ersten drei Bedingungen. Es scheint jedoch nicht erforderlich zu sein, diese Bedingungen aufzulisten, da das Auftreten eines Deadlocks dadurch verhindert werden kann Zerstörung einer der vier Bedingungen.
Deadlock-Prävention
Wir können Deadlocks verhindern, indem wir die vier notwendigen Bedingungen für Deadlocks zerstören. Da der gegenseitige Ausschluss von Ressourcen ein inhärentes Merkmal der Ressourcennutzung ist, kann er nicht geändert werden.
Zerstörung des „unveräußerlichen“ Zustands: Wenn ein Prozess nicht alle benötigten Ressourcen erhalten kann, befindet er sich in einem Wartezustand. Während der Wartezeit werden die von ihm belegten Ressourcen implizit freigegeben und erneut hinzugefügt Die Ressourcenliste des Systems kann von anderen Prozessen verwendet werden, und der Warteprozess kann nur neu gestartet und ausgeführt werden, wenn er seine ursprünglichen Ressourcen und neu angewendeten Ressourcen zurückerhält.
Zerstören Sie die „Anforderungs- und Haltebedingungen“: Die erste Methode ist die statische Zuweisung, das heißt, jeder Prozess wendet alle Ressourcen an, die er benötigt, wenn er mit der Ausführung beginnt. Die zweite Möglichkeit ist die dynamische Zuweisung, was bedeutet, dass jeder Prozess keine Systemressourcen belegt, wenn er die erforderlichen Ressourcen beantragt.
Zerstören Sie die Bedingung des „zirkulären Wartens“: Übernehmen Sie die geordnete Zuweisung von Ressourcen. Die Grundidee besteht darin, alle Ressourcen im System der Reihe nach zu nummerieren und bei der Anwendung größere Nummern für diejenigen zu verwenden, die knapp sind Bei Ressourcen müssen Sie sich an die Nummerierung halten. Damit sich ein Prozess für einen Prozess mit einer größeren Nummer nur dann bewerben kann, wenn er eine kleinere Nummer erhält.
Weitere technische Artikel zum Thema MySQL finden Sie in der Spalte MySQL-Tutorial.
Das obige ist der detaillierte Inhalt vonNotwendige Bedingungen für das Auftreten eines Deadlocks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!