Frage

Ich habe irgendwo gelesen, obwohl ich kann mich nicht erinnern, wo, dass die Sperre Schlüsselwort in C # kann zuweisen.

Ich weiß, dass ein Valuetype zu sperren versuchen, die Valuetype-Box, aber gibt es andere Situationen?

EDIT ::

  1. scheint jeder zu sein, die Antwort Valuetype Fall, ich dies bereits wissen!
  2. Ich weiß auch, was Schlösser sind und wie sie in großer Tiefe zu verwenden, allgemeine Beratung über die beste Praxis ist nett - aber nutzlos;)
  3. Ich muss weiß, weil ich eine XNA App baute für den Einsatz auf der Xbox. die xbox Garbage Collector ist sehr langsam - dies bedeutet, ich brauche zu halten Zuweisungen auf ein Minimum, vorzugsweise inexistent (die die verhindert Sammler aus immer läuft)
War es hilfreich?

Lösung

Während die Zuweisung von sehen intern Sync-Block ist faul (aber das ist eine Implementierung Detail, das IIRC ich von Essential.NET ‚Band 1‘ wissen, oder ist es über C # CLR - und soll als nur das behandelt werden), die einfache Fall des Artikels benötigen eingerahmt werden, wie Sie vorschlagen entstehen nicht - siehe Warum Sperre () nicht erlaubt ist, aber Monitor.Enter () erlaubt?

Andere Tipps

Wenn Sie mit dachten:

Schloss (das)

Sie sollten wissen, dass, weil Sie auf Ihre Instanz suchen, die Benutzer des Klasse könnte auch auf sie verriegeln und schrauben Sie oben. Unabhängig davon, ob das ist ein Frage hängt davon ab, was Sie denken, Ihre Benutzer tun könnte. Die gleiche Situation liegt vor, wenn Sie tun:

Schloss (typeof (MyClass))

Wenn Sie dies nicht tun, Sie können leicht eine statische oder Instanz zuweisen Objekt (dh Objekt myLock = new Object ()) und dann auf die sperren.

Quelle

Was vs Werttyp auf Referenztyp Sperren , diese SO Frage auf eine Ressource sperren, wenn erhalten ... hat die Antwort:

  

Es hängt von der Art - wenn ein   Referenzart dann ja, wenn ein Wert   Typ-Nr. Dies ist auch, warum sollten Sie   nie sperren, je auf einem Werttyp seit   der Werttyp wird eingerahmt und jede   nachfolgende Versuche zu erfassen, dass   Wert erwerben tatsächlich eine Sperre auf   ein anderes Objekt.

Definition von lock-Anweisung:

  

Sperre Statement (C # Referenz)

     

Das Schloss Schlüsselwort markiert eine Aussage   Block als kritischer Abschnitt durch   Erhalten des gegenseitigen Exklusionssperre   für ein bestimmtes Objekt, eine Ausführung   Anweisung, und dann die Freigabe des   sperren.

Die SO Frage auf Schloss Schlüsselwort in C # in der Lage sein zu helfen. Sie können auch einen Blick auf Warum lock () ist nicht erlaubt, aber Monitor.Enter () erlaubt?

Die Spezifikation für den Compiler definiert die Verhalten die Sperre wie so :

  

Die Kompilierung Typ der   Ausdruck einer lock-Anweisung wird   werden, um ein Referenz-Typ oder ein> type   Parameter (§25.1.1) bekannt sein, um ein   Referenztyp. Es ist eine Kompilierung-   Fehler für die Kompilierung Art der   Ausdruck einen Wert-Typen zu bezeichnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top