Autor Beitrag
Pete550
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 22.08.11 23:48 
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):

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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.

_________________
>λ=