Ich lese die Kunst der Multiprozessor-Programmierung und versuche, ihr Konzept inkonsistenter Sperren zu verstehen. Insbesondere auf Seite 37 ist mir die Definition 2.8.1 einer inkonsistenten Sperre sowie Lemma 2.8.1 nicht klar.
Definition 2.8.1. Der Status eines Sperrobjekts s ist in jedem globalen Status inkonsistent, in dem sich ein Thread im kritischen Bereich befindet. Der Sperrstatus ist jedoch mit einem globalen Status kompatibel, in dem sich kein Thread im kritischen Bereich befindet oder versucht einzutreten.
Lemma 2.8.1 Keine Deadlock-freie Lock-Implementierung kann in einen inkonsistenten Zustand eintreten.
Beweis:
Angenommen, das Lock-Objekt befindet sich in einem inkonsistenten Zustand, in dem sich kein Thread im kritischen Bereich befindet oder versucht, ihn einzugeben. Wenn Thread B versucht, in den kritischen Abschnitt einzutreten, muss er möglicherweise erfolgreich sein, da die Implementierung Deadlock-frei ist.
Angenommen, das Lock-Objekt befindet sich in einem inkonsistenten Zustand s, wobei sich A im kritischen Bereich befindet. Wenn Thread B versucht, in den kritischen Abschnitt einzutreten, muss er blockieren, bis A verlässt. Wir haben einen Widerspruch, weil B nicht feststellen kann, ob sich A im kritischen Bereich befindet.
Was ich nicht verstehe:
- Bedeutet Inkonsistenz nur, dass andere Threads nichts davon wissen können, wenn sich ein Thread in einem kritischen Abschnitt befindet?
- Was ist der Widerspruch in einem Lemma-Beweis? Angenommen, Thread A befindet sich in einem kritischen Abschnitt und die Sperre befindet sich in einem inkonsistenten Zustand. Was hindert einen anderen Thread daran, den Status der Sperre zu überschreiben und zu erfassen?