Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 20027|Antwort: 0

[Quelle] Das C#-Lock-Schlüsselwort markiert einen Block von Anweisungen als kritischen Bereich, indem es für ein gegebenes Objekt einen Mutex erhält und die Ausweisung ausführt, aber...

[Link kopieren]
Veröffentlicht am 31.12.2015 17:51:01 | | |
Das Lock-Schlüsselwort markiert einen Block von Anweisungen als kritische Zone, indem ein Mutex für ein gegebenes Objekt genommen, die Anweisung ausgeführt und dann die Sperre freigegeben wird.

Die Lock-Anweisung verwendet im Grunde Monitor.Enter und Monitor.Exit, das heißt, Monitor.Enter(this) wird ausgeführt, wenn lock(this) ausgeführt wird, und Monitor.Exit(this) wird am Ende des Curly-Krassels ausgeführt. Was bedeutet sie? Für jedes Objekt ist der erste Teil des Speichers die Adresse aller Methoden, der zweite Teil ein Index. Er zeigt auf einen SyncBlock im SyncBlock-Cache-Bereich der CLR. Was bedeutet das? Das heißt, wenn Sie Monitor.Enter(Object) ausführen, wählen Sie bei negativem Indexwert des Objekts einen SyncBlock aus dem SyncBlock-Cache aus und fügen Sie dessen Adresse in den Index des Objekts ein. Dies vervollständigt die vom Objekt markierte Sperre, und die anderen Threads wollen die Operation Monitor.Enter(object) erneut ausführen, was einen Index mit einem positiven Objekt bekommt, und dann warten. Bis der Index negativ wird, d. h. der Thread verwendet Monitor.Exit(object), um den Index negativ zu machen.

Worauf Sie bei der Verwendung von Schloss achten sollten:
1. Sperre kann den Nullwert nicht sperren Ein Objekt kann auf Null zeigen, aber Null muss nicht freigegeben werden. (Siehe auch: Vollständiges Null verstehen)
2.lock kann den String-Typ nicht sperren, obwohl er ebenfalls ein Referenztyp ist. Weil der String-Typ vom CLR "schwebt" wird
Das bedeutet, dass es nur eine Instanz eines bestimmten Strings im gesamten Programm gibt und dasselbe Objekt diesen Text in allen Threads aller laufenden Anwendungsdomänen darstellt. Daher sind alle Exemplare dieses Strings in der Anwendung gesperrt, solange eine Sperre auf eine Zeichenkette mit demselben Inhalt gesetzt wird. Daher ist es am besten, private oder geschützte Mitglieder zu sperren, die nicht getragen werden.
3. Locklock das Objekt ist die Speichergrenze eines Programmblocks
4. Der Werttyp kann nicht gesperrt werden, da das "Objekt freigegeben" im vorherigen Text in Rot steht und der Werttyp kein Referenztyp ist
5.Lock vermeidet das Sperren öffentlicher Typen oder Objekte, die nicht vom Programm gesteuert werden.
Wenn die Instanz zum Beispiel öffentlich zugänglich ist, kann Lock(dies) problematisch sein, weil unkontrollierter Code das Objekt ebenfalls sperren kann. Dies kann zu Deadlocks führen, bei denen zwei oder mehr Threads darauf warten, dasselbe Objekt freizugeben. Das Sperren öffentlicher Datentypen (im Gegensatz zu Objekten) kann aus demselben Grund ebenfalls Probleme verursachen.
Bei Verwendung von lock(this) kann der Wert der Klassenmitgliedsvariable durch die Methode geändert werden, die sich nicht in der kritischen Zone befindet

Anwendungsszenario: Es wird häufig verwendet, um unsichere Ausnahmen im Wert öffentlicher Variablen durch Multithread-Operationen zu verhindern, um die Sicherheit der Operationen zu gewährleisten









Vorhergehend:Win8 startet den SQL Server 2012-Dienst
Nächster:[Speed] IP-Segment-Open-Port-Scanner für schnelle Scangeschwindigkeit!!
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com