Kursinhalt
Fortgeschrittenes C# mit .NET
Fortgeschrittenes C# mit .NET
Die Lock-Anweisung
Beim Arbeiten mit mehreren Threads kann es Situationen geben, in denen mehrere Threads versuchen, gleichzeitig auf eine Ressource zuzugreifen und diese zu aktualisieren. Eine Ressource kann alles Mögliche sein, zum Beispiel eine Variable, eine Datei oder sogar eine entfernte Ressource, auf die über eine API zugegriffen wird.
Solche Situationen werden als "Race Conditions" bezeichnet, da die Threads normalerweise um dieselbe Ressource konkurrieren und das gleichzeitige Ändern derselben Ressource zu unvorhersehbaren und inkonsistenten Ergebnissen führen kann.
Wir können sicherstellen, dass es in unserer Anwendung keine Race Conditions gibt, indem wir den Code in lock
-Anweisungen einschließen, wo immer erwartet wird, dass mehrere Threads versuchen könnten, diese Anweisungen gleichzeitig auszuführen.
Falls mehrere Threads versuchen, auf eine Ressource zuzugreifen oder ein Stück Code auszuführen, das in einem lock
eingeschlossen ist, werden sie in eine Warteschlange eingereiht und gezwungen, nacheinander auf die Ressource zuzugreifen, wodurch jede Möglichkeit einer Race Condition effektiv ausgeschlossen wird.
Die Syntax für eine lock-Anweisung ist:
index
object keyObject = new object(); lock(keyObject) { // code to execute }
Hier ist keyObject
eine Instanz der object
-Klasse und dient als Schlüssel, der die Synchronisation zwischen mehreren Threads gewährleistet. Dieses Objekt sollte für alle Threads dasselbe sein, daher ist es in der Regel eine gute Praxis, es entweder als statisches Mitglied zu machen oder es allen Threads ohne Änderungen zugänglich zu machen.
Das folgende Video demonstriert die Verwendung der lock-Anweisung:
1. Was ist der Zweck der lock-Anweisung in C#?
2. Welches Schlüsselwort wird verwendet, um einen kritischen Codeabschnitt zu definieren, der durch ein Lock geschützt ist?
Danke für Ihr Feedback!