Was wird an das Schlüsselwort lock übergeben?

8

Was ist der Unterschied (falls vorhanden) zwischen der Verwendung von

? %Vor%

oder

%Vor%

?

Gibt es einen Unterschied in der Leistung? Stil? Verhalten?

    
juan 23.02.2010, 15:26
quelle

4 Antworten

11

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

    
SLaks 23.02.2010, 15:28
quelle
17
___ qstnhdr ___ Was wird an das Schlüsselwort lock übergeben? ___ answer2319335 ___

Das Muster, dem ich normalerweise folge, ist das für eine Klasse, die als lock(this) .... deklariert ist.

%Vor%

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 ...

    
___ answer2319332 ___

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%     
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123locking ___ Durch das Sperren können verschiedene Arten von Ressourcen ausschließlich von jeweils einem Prozess verwendet werden. ___ qstntxt ___

Was ist der Unterschied (falls vorhanden) zwischen der Verwendung von

? %Vor%

oder

%Vor%

?

Gibt es einen Unterschied in der Leistung? Stil? Verhalten?

    
___ answer2319302 ___

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

    
___
Jon Skeet 23.02.2010 15:29
quelle
3

Das Muster, dem ich normalerweise folge, ist das für eine Klasse, die als static .... deklariert ist.

%Vor%

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 ...

    
t0mm13b 23.02.2010 15:32
quelle
1

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%     
JMarsch 23.02.2010 15:32
quelle

Tags und Links