Junior
Was ist die Funktion des Schlüsselworts lock in der Programmiersprache C#?
sobes.tech KI
Antwort von AI
Das Schlüsselwort lock wird verwendet, um den Zugriff auf Ressourcen in Multithread-Anwendungen zu synchronisieren. Es stellt sicher, dass nur ein Thread den Code innerhalb des lock-Blocks zu einem bestimmten Zeitpunkt ausführen kann.
Funktionsprinzip:
lockakzeptiert als Argument ein Objekt, das als Mutex (Monitor) verwendet wird.- Bevor der Code im
lock-Block ausgeführt wird, versucht der Thread, eine exklusive Sperre auf das angegebene Objekt zu erhalten. - Wenn die Sperre frei ist, erhält der Thread sie und führt den Code aus.
- Wenn die Sperre von einem anderen Thread gehalten wird, wird der aktuelle Thread blockiert (wechselt in den Wartezustand), bis die Sperre freigegeben wird.
- Beim Verlassen des
lock-Blocks (auch bei Ausnahme) wird die Sperre automatisch freigegeben.
Es wird verwendet, um gemeinsam genutzte Ressourcen wie Klassenfelder, Sammlungen oder andere Objekte zu schützen, auf die mehrere Threads gleichzeitig zugreifen können, um Race Conditions zu vermeiden und die Datenintegrität zu gewährleisten.
Beispiel für die Verwendung:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Objekt zur Synchronisation
public void Increment()
{
lock (_lockObject) // Exklusiver Zugriff auf den Codeblock
{
_counter++; // Sicheres Ändern der gemeinsamen Ressource
}
}
public int GetCounter()
{
lock (_lockObject) // Auch beim Lesen exklusiver Zugriff
{
return _counter;
}
}
}
Wichtige Punkte:
- Das Sperrobjekt sollte vom Referenztyp sein und in der Regel ein privates Feld (
readonly), um externe Eingriffe zu verhindern. - Vermeiden Sie das Sperren von Typen wie
string,thisodertypeof(TypeName), da diese gemeinsam genutzt oder von außen zugänglich sein können, was zu Deadlocks oder fehlerhaftem Verhalten führen kann. lockist syntaktischer Zucker für die Verwendung der Methoden der KlasseMonitor.