2017-01-26 4 views
-1

Stellen Sie sich eine Situation vor, in der mehrere Prozesse versuchen, eine gemeinsam genutzte Ressource zu verwenden.Etwas über kritische Abschnitte

Sie können es mit einem Java-Monitor (zum Beispiel - synchronisierte Methoden) schützen.

Aber was, wenn Ihre Klassen diesem Protokoll folgen müssen?

Anforderungsmethode - kritische Abschnitt - Ende Methode

Jeder Prozess ist die einzigen, der die Anfrage und Endmethoden Ausführung gleichzeitig dank der synchronisierten Blöcke, aber was ist mit dem Kern des kritischen Abschnitts?

Mit anderen Konstrukten wie Semaphoren oder Lock/Condition können Sie es leicht machen, aber mit nativen Monitor sind Sie daran gebunden, dass eine Synchronisation durch einen Block identifiziert wird, der nicht mehrere Methoden durchlaufen kann.

Wenn Sie eine boolean verwenden, die Ihnen sagt, ob die Ressource beschäftigt ist (Aufruf wait() direkt danach) oder nicht, kann Deadlock auftreten!

Also, was könnte eine gute Lösung dafür sein?

+7

Sie sollten auf jeden Fall diese stattdessen in zwei getrennte Fragen aussehen aufzuschlüsseln. Sie können hier eine Frage auswählen und die andere für etwas später verlassen. – Makoto

+0

Sie können sogar den anderen gleichzeitig posten. –

+1

Do stuff -> Anruf synchronisierte Methode für Ihren kritischen Abschnitt -> Do Zeug – user2677821

Antwort

0

eine Situation vor, in der ...

Es für, dass ein Name, es ist lange Transaktion, und wenn Sie denken, dass Sie es implementieren müssen, das ist ein Zeichen dafür, dass es an der Zeit sein kann, Überdenken Sie Ihr Design.

Warum es schlecht ist und wie man es vermeidet, ist ein Thema auf Bücherebene.

Hier ist ein Buch, das es ziemlich gut behandelt:

https://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420