Ich schrieb einen einfachen Code (angehängt) und ich verstehe nicht, warum die Sperre eines Blocks den Bereich nicht sperrt.
Der Code:
%Vor%Ich erwarte, dass der Aufruf für die foo-Methode in der while-Schleife wartet, bis das Schließfach freigegeben wird (Schließfach-Gültigkeitsbereich) - aber alle Aufrufe des foo mit arg von ++ i können in den Schließfachblock eintreten.
Das Schlüsselwort lock ist nur syntaktischer Zucker um die Methoden Monitor.Enter
und Monitor.Exit
. Wie in der Dokumentation für Monitor
:
Es ist legal, dass der gleiche Thread mehrmals Enter aufruft, ohne dass er blockiert;
Der Aufruf von lock(object)
aus demselben Thread mehr als einmal hat keinen anderen Effekt, als die Anzahl der Sperren zu erhöhen.
Tags und Links c#