2009-05-04 17 views
1

Ich entwerfe einige unveränderliche Klassen, aber ich habe einige Variablen wie sagen .Count, um die Gesamtzahl der Instanzen zu haben. Aber würde sich eine statische Variable auf Multi-Threading auswirken?Unveränderlichkeit und statische Variablen

Da Methoden wie Hinzufügen, Entfernen usw. den Wert .Count aktualisieren müssen. Vielleicht sollte ich es faul machen?

+0

Hat jeder Thread das gleiche List-Objekt zugreifen muß oder kann jeder Thread hat ihre eigene Sammlung? Grundsätzlich muss was zwischen Threads geteilt werden. –

+0

Nein Ich brauche sie nur, um die Anzahl entsprechend zu erhöhen/zu verringern. –

+0

Beitrag einen Code? –

Antwort

2

Wenn Sie nur einen Zähler machen, können auch verriegelte Operationen anstelle einer Sperre eine Option sein. MSDN hat eine nice example of this im Zusammenhang mit einer Referenzzählung.

0

Ja, immer wenn Sie eine freigegebene Variable in einer Umgebung mit mehreren Threads aktualisieren, müssen Sie diese Updates einfach in eine Sperre einschließen.

2

Sie könnten zumindest in dem von Ihnen angegebenen Beispiel Funktionen aus der Interlocked-Klasse in Betracht ziehen.

+0

Das bedeutet in der Praxis, die parallelen Operationen werden langsamer, oder? –

+0

Langsamer als was? – bdonlan

+0

Langsamer als ein Fall, in dem die Zählung eine Instanz war (nicht, dass es funktionieren würde), aber theoretisch. –

1

Aber würde eine statische Variable Multithreading beeinflussen?

sicher! Der gemeinsame Status wird per Definition durch Multithreading beeinflusst.

Da Methoden wie Hinzufügen, Entfernen usw. den .Count-Wert aktualisieren müssen. Vielleicht sollte ich es faul machen?

ist es besser, mit einer Klasse, die does an atomic add (wie AtomicInteger in Java), um Sperren zu vermeiden: take a look here