Hallo zusammen,
ich habe mal eine Frage bezüglich das druchloopen von Listen und Arrays.
Folgender Code:
das Resultat sieht nun so aus, dass beide Threads scheinbar Ihr eigenes Array generieren und diese werden ohne Fehler vollständig durchgeloopt.
Änder ich nun das Array zu einer List<int>
Dann kommt es spätestens beim Auslesen der Liste zu einer Exception, da die Enumeration sich ja geändert hat.
Nun stellt sich mit die Frage, wieso das ganze bei einem normalen Array funktioniert.
Änder ich nun den Lese-Thread wie folgt ab:
kommt ebenfalls das gewünschte Ergebnis.
Kann ich also mit einem Array Änderungen umgehen? Sodass ich gleichzeitig das Array durchloopen kann und ein andere Thread setzt hier andere Daten?
Was genau geht hier vorsich?
LG Marvin
ich habe mal eine Frage bezüglich das druchloopen von Listen und Arrays.
Folgender Code:
C#-Quellcode
- private static int[] iArr = new int[0];
- static void Main(string[] args)
- {
- Thread t1 = new Thread(FülleArray);
- t1.Start();
- Thread t2 = new Thread(LeseArray);
- t2.Start();
- Console.ReadKey();
- }
- private static void FülleArray()
- {
- while (true)
- {
- iArr = new int[5000];
- for (int i = 0; i < 5000; i++)
- {
- iArr[i] = i;
- Console.WriteLine("Thread 1:" + i);
- }
- }
- }
- private static void LeseArray()
- {
- while (true)
- {
- foreach (int i in iArr)
- {
- Console.WriteLine("Thread 2:" + i);
- }
- }
- }
das Resultat sieht nun so aus, dass beide Threads scheinbar Ihr eigenes Array generieren und diese werden ohne Fehler vollständig durchgeloopt.
Änder ich nun das Array zu einer List<int>
C#-Quellcode
- private static List<int> iArr = new List<int>();
- static void Main(string[] args)
- {
- Thread t1 = new Thread(FülleArray);
- t1.Start();
- Thread t2 = new Thread(LeseArray);
- t2.Start();
- Console.ReadKey();
- }
- private static void FülleArray()
- {
- while (true)
- {
- iArr.Clear();
- for (int i = 0; i < 5000; i++)
- {
- iArr.Add(i);
- Console.WriteLine("Thread 1:" + i);
- }
- }
- }
- private static void LeseArray()
- {
- while (true)
- {
- foreach (int i in iArr)
- Console.WriteLine("Thread 2:" + i);
- }
- }
Dann kommt es spätestens beim Auslesen der Liste zu einer Exception, da die Enumeration sich ja geändert hat.
Nun stellt sich mit die Frage, wieso das ganze bei einem normalen Array funktioniert.
Änder ich nun den Lese-Thread wie folgt ab:
kommt ebenfalls das gewünschte Ergebnis.
Kann ich also mit einem Array Änderungen umgehen? Sodass ich gleichzeitig das Array durchloopen kann und ein andere Thread setzt hier andere Daten?
Was genau geht hier vorsich?
LG Marvin