1. Nicht blockierender Algorithmus
Nicht blockierende Algorithmen gehören zum gleichzeitigen Algorithmus. Das Design und die Implementierung von nicht blockierenden Algorithmen ist äußerst schwierig, können jedoch einen besseren Durchsatz bieten und auch eine bessere Verteidigung über Überlebensprobleme (z. B. tote Schlösser und Prioritätsumkehr) bieten. Verwenden Sie den zugrunde liegenden Atommaschinenbefehl, um das Schloss wie Vergleich und Austausch zu ersetzen (CAS, Vergleich und Swap).
2. PESSY -Technologie
Das exklusive Schloss ist eine Art pessimistische Technologie. Objektstatus.
3. optische Technologie
Verlassen Sie sich zuerst auf Konfliktüberwachung.
4.CAS -Betrieb
CAS verfügt über 3 Vorgänge, Speicherwert V und einen alten erwarteten Wert A, den neuen Wert B, der geändert werden soll. Wenn der erwartete Wert A mit dem internen Einzahlungswert v übereinstimmt, wird der interne Einzahlungswert V auf B geändert, andernfalls wird nichts getan. Der typische Modus von CAS lautet: zuerst A von V von V lesen, den neuen Wert B gemäß A berechnen und dann den CAS verwenden, um den Wert in V von A zum Wert zu ändern, wird an andere Werte geändert).
Liste 3. Erläutern Sie den Code -Kopiercode des Verhaltens (nicht die Leistung) des Vergleichs und des Austauschs.
Öffentliche Klasse simuliertes {
Privates intwert;
Public synchronisierte int getValue () {Rückgabewert;}
Public synchronisierte int vergleicheSwap (int erwartungsvalue, int newValue) {
int oldValue = Wert;
if (value == erwartetValue))
Wert = newValue;
Kehren Sie OldValue zurück;
}
}
Listing 4. Verwenden Sie Vergleich und Austausch, um den Code Code Code Copy wie folgt zu implementieren:
Öffentliche Klasse Cascounter {
Privat simuliertes Wert;
public int getValue () {
Return value.getValue ();
}
public int Increment () {{)
int oldValue = value.getValue ();
While (value.comParendswap (OldValue, OldValue + 1)! = OldValue)
OldValue = value.getValue ();
Kehren Sie OldValue + 1 zurück;
}
}
5. Atomvariablen
Die Unterstützung von Atomvariablen kann die Atomizität ohne Schlossschutz aktualisieren, und die untere Schicht wird mit CAS implementiert. Es gibt 12 Atomvariablen, die in 4 Gruppen unterteilt werden können: Skalarkategorie, Updateklasse, Array -Klasse und zusammengesetzte Variablen. Die am häufigsten verwendeten Atomvariablen sind skalare Kategorien: Atomicinger, Atomiclong, Atomicboolean und Atomicreference. Alle Typen unterstützen CAS.
6. Leistungsvergleich: Sperr- und Atomvariablen
Unter dem Wettbewerb mit niedriger und mittlerer Ebene können Atomvariablen eine hohe Skalierbarkeit liefern, und die Leistung von Atomvariablen überschreitet die Schlösser. Variable Leistungsessenz In realistischeren tatsächlichen Situationen wird die Leistung von Atomvariablen jedoch die Leistung des Schlosses überschreiten.