Entwickler-Ecke

Sonstiges (.NET) - Static Variabel Threadsicher


Pete550 - Mo 22.08.11 23:48
Titel: Static Variabel Threadsicher
Hallo Zusammen


Ich bräuchte etwas Hilfe zum Thema Threadsicherheit.

Die Variabel Anzahl wird ständig von einem Thread verändert.
Ein zweiter Thread greift lesend darauf zu.
Folgendes Beispiel sollte einen Fehler ausgeben da der Inhalt sich während dem Lesen verändert.

Reicht es die Variabel als volatile zu deklarieren?
Ist es möglich die Variabel Anzahl mittels eines get/set Block zu schreiben/lesen und diesen dann komplett mit Lock zu sichern?



Bsp (dient nur zur Veranschaulichung):


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
class Thread1
{
  internal static List<int> Anzahl;

  internal static void Loop()
  {
     while (true)
     {
       Anzahl.add(1); 
     }
  }
}


class Thread2
{
  internal static void out()
  {
    foreach (int u in Thread1.Anzahl)
      Console.Write(u);
  }
}



Moderiert von user profile iconKha: Topic aus C# - Die Sprache verschoben am Di 23.08.2011 um 00:53


Kha - Di 23.08.11 00:55

Da sich die Referenz selbst ja nicht ändert, haben hier static, volatile und Getter/Setter überhaupt keine Auswirkung. Es bleibt nur, jeweils die Codeteile, die tatsächlich die Instanz manipulieren, mit Locks abzusichern, oder eine passende threadsafe Collection zu benutzen.