Heim  >  Artikel  >  Java  >  Ausführliche Einführung zu „Haves-Before“.

Ausführliche Einführung zu „Haves-Before“.

巴扎黑
巴扎黑Original
2017-06-14 09:46:341688Durchsuche

Um die Leistung zu verbessern, ordnen Prozessoren und Compiler die Anweisungen häufig neu an, sie können jedoch nicht nach Belieben neu angeordnet werden. Es müssen die folgenden zwei Bedingungen erfüllt sein. Die Ergebnisse der Programmausführung können in einer Single-Thread-Umgebung nicht geändert werden. Wenn Datenabhängigkeiten bestehen, ist eine Neuordnung nicht zulässig. Wenn Sie den vorherigen Blog von LZ gelesen haben, wissen Sie, dass diese beiden Punkte tatsächlich einem zugeordnet werden können Punkt: Das Passiert-Vorher-Prinzip kann nicht weitergegeben werden. Darüber hinaus erlaubt JMM eine beliebige Reihenfolge. Als-ob-serielle Semantik bedeutet, dass alle Vorgänge zur Optimierung neu angeordnet werden können. Sie müssen jedoch sicherstellen, dass die Ausführungsergebnisse nach der Neuordnung nicht geändert werden können. Der Compiler, die Laufzeit und der Prozessor müssen alle dem Als-ob- entsprechen. serielle Semantik. Beachten Sie, dass „as-if-serial“ nur eine Single-Thread-Umgebung garantiert und in einer Multi-Thread-Umgebung ungültig ist. Lassen Sie uns ein einfaches Beispiel zur Veranschaulichung verwenden: int a = 1;

[Tote Java-Parallelität]-----Neuordnung des Java-Speichermodells

Ausführliche Einführung zu „Haves-Before“.

Einführung: Um die Leistung zu verbessern, ordnen Prozessoren und Compiler häufig Anweisungen neu an. Sie können die Reihenfolge jedoch nicht nach Belieben ändern Sie können es nicht beliebig sortieren. Es muss die folgenden zwei Bedingungen erfüllen: 1. Das Ergebnis der Programmausführung kann in einer Single-Thread-Umgebung nicht geändert werden. Wenn Sie sich den letzten Blog von LZ ansehen, werden Sie wissen, dass diese beiden Punkte tatsächlich auf eines zurückzuführen sind: Sie können nicht durch das „Passiert-vorher“-Prinzip abgeleitet werden, und JMM erlaubt eine beliebige Reihenfolge. as-if-serial semantics as-if-se

2 🎜>

Einführung: Im letzten Blog ([Deadly Java Concurrency] – Eingehende Analyse des Implementierungsprinzips von Volatile) erwähnte LZ es Es wurde festgestellt, dass es aufgrund des Vorhandenseins von lokalem Thread-Speicher und Hauptspeicher in Verbindung mit der Neuordnung zu Sichtbarkeitsproblemen in Multithread-Umgebungen kommt. Wenn wir also Synchronisation und Sperren richtig verwenden, wann ändert Thread A die Variable a, die für Thread B sichtbar ist? Wir können nicht in allen Szenarien festlegen, wann von einem Thread geänderte Variablen für andere Threads sichtbar sind. Diese Regel gilt ab JDK 5. JMM verwendet haAusführliche Einführung zu „Haves-Before“.

3. Praxis des nicht blockierenden Synchronisationsalgorithmus (3) - LatestResultsProvider

Einführung: Vielen Dank an trytocatch für die Übermittlung dieses Artikels. Vorwort Bevor Sie diesen Artikel lesen, müssen sich die Leser mit „Happen vor“ vertraut machen und einige grundlegende Konzepte der nicht blockierenden Synchronisierung verstehen. Der Schwerpunkt dieses Artikels liegt auf der flexiblen Anwendung der „Passiert-vorher“-Regel, einigen Tipps zur Problemlösung und Möglichkeiten zur Problemanalyse. Hintergrundeinführung Die ursprüngliche Anforderung lautet: Ich habe ein reguläres Ersatztool geschrieben Ausführliche Einführung zu „Haves-Before“.

[Verwandte Fragen und Antworten]:

passiert vom Java-Speichermodell- vor Ausgabe der semantischen Reihenfolge

Das obige ist der detaillierte Inhalt vonAusführliche Einführung zu „Haves-Before“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn