Inhaltsverzeichnis:
Definition - Was bedeutet Lock Statement?
Eine Lock-Anweisung in C # ist eine Anweisung, die das Schlüsselwort "lock" enthält und in Multithread-Anwendungen verwendet wird, um sicherzustellen, dass der aktuelle Thread einen Codeblock vollständig ausführt, ohne von anderen Threads unterbrochen zu werden. Die lock-Anweisung erhält eine gegenseitige Ausschlusssperre für ein bestimmtes Objekt, sodass jeweils ein Thread den Codeblock ausführt und den Codeblock nach dem Aufheben der Sperre verlässt.
Die lock-Anweisung ist ein exklusives Sperrkonstrukt, mit dem der synchronisierte Zugriff auf gemeinsam genutzte Daten in Multithread-Anwendungen sichergestellt wird. Es hilft dabei, die Integrität einer veränderlichen Ressource zu schützen, die von mehreren Threads gemeinsam genutzt wird, ohne dass diese Threads gestört werden. Die lock-Anweisung kann von einem Singleton-Objekt verwendet werden, um den gleichzeitigen Zugriff mehrerer Clients auf die gemeinsamen Daten zu verhindern.
Die lock-Anweisung ist das primäre Synchronisationsprimitiv, das in der .NET Framework-Klassenbibliothek verfügbar ist. Es generiert automatisch konsistenten und ausnahmesicheren Code, der die Synchronisierungsanforderungen in Multithread-Programmen erfüllt. Es bietet auch eine einfache Methode zur Steuerung der Synchronisation durch Generieren von effizientem Code, wodurch Fehler vermieden werden, die durch manuell geschriebenen Code verursacht werden können.
Techopedia erklärt die Lock-Anweisung
Die lock-Anweisung sollte mit einem Argument vom Referenztyp und nicht vom Werttyp versehen werden. Im Allgemeinen wird empfohlen, ein privates Instanzmitglied oder ein privates statisches Mitglied zu sperren, um die Daten zu schützen, die von allen Instanzen des Objekts gemeinsam genutzt werden. Da das Sperren von öffentlichen Typen oder Instanzen, die außerhalb der Kontrolle des Codes liegen, zu Deadlocks führen kann, in denen mehrere Threads auf die Freigabe eines einzelnen Objekts warten, das für eine Sperranweisung verwendet wird, müssen sie vermieden werden.
Ein Beispiel für die Verwendung der Sperranweisung kann eine Multithread-Anwendung sein, bei der ein Kontoobjekt mit einer Methode zum Abheben eines Kontostands die Sperranweisung verwendet, um zu verhindern, dass mehrere Threads dieselbe Methode gleichzeitig ausführen, wodurch der Kontostand möglicherweise auf einen negativen Wert verschoben wird .
Der Hauptteil einer lock-Anweisung muss klein sein, um die Zeit zu verkürzen, die andere Threads für die Sperre benötigen, um die Wahrscheinlichkeit eines Deadlocks zu verringern und die Wahrscheinlichkeit zu minimieren, dass eine Ausnahme auftritt.
Zu den Einschränkungen bei der Verwendung von Lock-Anweisungen gehört, dass sie nur mit Daten verwendet werden können, die für die aktuelle Anwendung relevant sind. Lock-Anweisungen können auch keine Zeitüberschreitung unterstützen.
