Sind C# automatisch implementierten statischen Eigenschaften, die thread-sicher?
Ich würde gerne wissen, ob C# automatisch implementierte Eigenschaften, wie public static T Prop { get; set; }
sind thread-safe ist oder nicht. Danke!
- Man müsste definieren, was genau meinen Sie mit "thread-safe" in diesem besonderen Fall, ersten.
- Durch thread-sichere ich meine, wenn ich Schreibe den Wert in einem thread und einem anderen thread versucht, es zu Lesen, könnte der zweite thread erhalten einen falschen Wert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erscheint es nicht. Dies ist die Dekompilierung mit Reflektor:
Int32
,float
und Verweise sind atomic. Es macht nicht viele Garantien über Gewinde Sichtbarkeit / register Zwischenspeichern etc.double
ist nicht garantiert atomar; wenn Sie ein double-Feld aus {x} von {y}, einem anderen thread sehen konnte, nach nur die erste Hälfte wurde aktualisiert - es könnte sich auch ein verschiedene Anzahl ({z}), der nie existierte als eine "echte" Wert des Feldes (riesige Korruption Problem).Abschnitt 10.7.4 ausgeliefert wird der C# - Spezifikation besagt:
Dass das, was wir Versprechen, und das ist, was Sie bekommen. Der Punkt der automatischen Eigenschaften zu tun, die die meisten grundlegenden, einfache, billige Sache, wenn Sie wollen, um etwas schicker mag, dann sollten Sie schreiben, eine "echte" Eigenschaft.
Nicht. Sie müssen wickeln Sie Sie in thread-locking-Mechanismen.
Glaube ich nicht so. Ich glaube, Sie sind nur syntatic Zucker:
Es ist keine Synchronisation mit einem automatischen Eigenschaften, einschließlich der statischen Eigenschaften.
Wenn Sie voller thread-Sicherheit, Sie werden wollen, verwenden Sie Ihre eigenen Eigenschaften mit einem Feld sichern, und Griff die Synchronisation selbst.
Für die Vollständigkeit, Feld-wie bei den Ereignissen tun haben thread-Sicherheit gebaut, aber Sie sind allein in diesem. Automatisch implementierte Eigenschaften nicht haben solche Funktionen. Sie können jedoch etwas tun:
Das problem mit diesem ist, dass es blockiert den
Type
, das ist ein schlechte Sache. Ich würde die Umsetzung eigener Synchronisation für diese persönlich.Nein, Sie ist nicht threadsicher. Statische Eigenschaften genauso anfällig wie statische Felder sind, um Parallelitätsprobleme.