Ich habe über Einfädeln dieses Buch von Joseph Albahari lesen:
http://www.albahari.com/threading/Warum ist diese Zuweisung nicht Thread-sicher?
In Teil 2, fand ich dieses Beispiel:
http://www.albahari.com/threading/part2.aspx#_When_to_Lock
Hier ist das bereits erwähnte Beispiel:
class ThreadUnsafe
{
static int _x;
static void Increment() { _x++; }
static void Assign() { _x = 123; }
}
Gewindesichere Version:
class ThreadSafe
{
static readonly object _locker = new object();
static int _x;
static void Increment() { lock (_locker) _x++; }
static void Assign() { lock (_locker) _x = 123; }
}
Ich konnte nicht verstehen, warum Assign Methode ist nicht threadsicher. Sollte die Integer-Zuweisung nicht atomarer Betrieb auf 32- und 64-Bit-Architekturen sein?
Könnten Sie bitte diese while-Schleife erläutern? Wenn Thread 1 immer _x mit 123 belegt, was könnte Thread 2 dann davon lesen? – Ivan
Der ursprüngliche Code hinzugefügt, um die Frage zu klären. –
@Ivan: Was ist damit? Es versucht nur zu loopen, bis Thread 2 die Zuweisung von 123 zu "_x" "sieht". Der Punkt ist, dass es diese Veränderung vielleicht nie "sehen" wird. –