Gibt es einen Unterschied zwischen Deadlock-Status und unsicherem Status?


Antwort 1:

Deadlock ist ziemlich gut definiert - eine Reihe von Threads befindet sich aufgrund zirkulärer Abhängigkeiten im Wartezustand. Ich weiß nicht, was im Allgemeinen ein "unsicherer" Zustand ist.

Für jede spezifische Anwendung besteht die Möglichkeit, einen "unsicheren Zustand" gemäß den Kriterien der Problemdomäne zu definieren. Zum Beispiel könnte man ein Befehls- und Kontrollsystem so definieren, dass es nach einer nicht behandelten Ausnahme, die auf der obersten Ebene erfasst wurde, unsicher ist (das System läuft also weiter, aber Gott weiß, was passiert ist).

Bei IT-Systemen können Sie sie "sicher herunterfahren", um eine Beschädigung der Daten zu verhindern. Bei OT-Systemen, die eine gewisse Kontrolle übernehmen, macht es Ihnen wahrscheinlich nichts aus, dass die Wahrscheinlichkeit einer Beschädigung der Daten theoretisch besteht, und Sie bevorzugen, dass das System funktioniert, wenn das Herunterfahren des Systems dazu führt Missionsversagen. Bei einigen gefährlichen Systemen, bei denen ein menschliches Eingreifen erforderlich ist, um den Prozess abzubrechen, wenn etwas schief geht, kann eine mangelnde Kommunikation mit "menschlich" (verpasste Kanalprüfung usw.) als "unsicher" angesehen werden und ein automatischer "Abbruch" wird befohlen (Ähnlich wie beim Totschalten in Zügen).

Alle diese „unsicheren Zustände“ gehören zu den Spezifikationen und dem Produktdefinitionsbereich, nicht zum reinen CS (im Gegensatz zum Deadlock, da sich niemand auf Produktebene um die Existenz, Verhinderung oder Lösung von Deadlocks kümmert, solange die Software ihre Aufgabe rechtzeitig erledigt Weise).


Antwort 2:

Ich glaube nicht, dass es eine allgemeine Definition dessen gibt, was unsicherer Zustand bedeutet, aber da die Frage Deadlocks enthält, gehe ich davon aus, dass wir darüber sprechen, wie sich ein Thread-Programm ohne Thread-Sicherheit verhalten kann.

Deadlock bedeutet, dass einige Threads darauf warten, dass sie etwas tun, in einem Zyklus, in dem Thread 1 blockiert wird, bis Thread 2 aktiv wird, Thread 2, bis Thread 3 etwas tut, Thread 3 bis ... und so weiter, bis zu Thread N, der auf die Aktion von Thread 1 wartet.

Thread-sicherer Code funktioniert garantiert gleich, unabhängig davon, wie viele Threads ihn gleichzeitig aufrufen. Ein unsicherer Status ist daher die Folge, wenn keine solche Garantie besteht, und der Code verhält sich unterschiedlich, je nachdem, welcher Thread ihn zuerst aufgerufen hat.

Wenn dies unsere Definitionen sein können, gibt es einen großen Unterschied zwischen Deadlock und einem unsicheren Zustand. Ein Deadlock-Status kann absolut sicher sein, hält jedoch für immer an, sodass Ihr Programm gestoppt wurde und die Ausführung nicht wieder aufgenommen wird. Ein unsicherer Zustand kann das Programm zum Absturz bringen, es mit falschen Ergebnissen beenden oder es tatsächlich mit einem korrekten Ergebnis beenden, und es wird beim nächsten Ausführen nicht unbedingt dasselbe tun. Sie können den Unterschied nicht erkennen, da das Ergebnis durch die Reihenfolge bestimmt wurde, in der Ihre Threads ausgeführt werden sollen, und Sie können nicht herausfinden, wie dies beim Lesen des Codes geschehen ist.