Der Unterschied ist, dass jeder Ihre Instanz sperren kann, aber nur Sie können ein privates Objekt sperren.
Dies hilft, Deadlocks zu verhindern.
Zum Beispiel:
Angenommen, Microsoft hat lock(this)
in der Klasse Control
verwendet.
Wenn jemand anderes eine Control
-Instanz sperrt, würde seine Sperre verhindern, dass der Code in Control
ausgeführt wird, was er nicht will.
Dies ist besonders schlimm, wenn Sie Typen sperren, die über AppDomains verteilt werden
Das Muster, dem ich normalerweise folge, ist das für eine Klasse, die als lock(this)
.... deklariert ist.
Auch für eine normale Klasse würde ich diesem Muster folgen:
%Vor%Auf diese Weise kann niemand meine Instanz sperren und Deadlocks verhindern ...
Bearbeiten: Ich habe diesen Artikel geändert, um den Code klarer zu machen, in dem die Basis der SomeMethod
-Sperre verwendet wird, und für eine normale Klasse ... Danke Steven und Dalle für ihre Point-Outs ...
Es gibt einen Unterschied im Umfang und es kann einen Unterschied im Verhalten geben (Übrigens wird die Verwendung von "this" von MS nicht empfohlen.
%Vor%Was ist der Unterschied (falls vorhanden) zwischen der Verwendung von
? %Vor%oder
%Vor%?
Gibt es einen Unterschied in der Leistung? Stil? Verhalten?
Der Unterschied ist, dass jeder Ihre Instanz sperren kann, aber nur Sie können ein privates Objekt sperren.
Dies hilft, Deadlocks zu verhindern.
Zum Beispiel:
Angenommen, Microsoft hat Foo
in der Klasse padlock
verwendet.
Wenn jemand anderes eine Foo
-Instanz sperrt, würde seine Sperre verhindern, dass der Code in Foo
ausgeführt wird, was er nicht will.
Dies ist besonders schlimm, wenn Sie Typen sperren, die über AppDomains verteilt werden
Das Muster, dem ich normalerweise folge, ist das für eine Klasse, die als static
.... deklariert ist.
Auch für eine normale Klasse würde ich diesem Muster folgen:
%Vor%Auf diese Weise kann niemand meine Instanz sperren und Deadlocks verhindern ...
Bearbeiten: Ich habe diesen Artikel geändert, um den Code klarer zu machen, in dem die Basis der static
-Sperre verwendet wird, und für eine normale Klasse ... Danke Steven und Dalle für ihre Point-Outs ...