Wiadomo, że odwołanie pobiera 4 bajty pamięci w 32-bitowym procesorze i 8 bajtach - w 64-bitowym procesorze. Tak więc procesory gwarantują, że pojedyncze odczyty i zapisywane do pamięci w przyrostach naturalnej wielkości słowa maszyny będą przeprowadzane atomowo. Z drugiej strony istnieją 2 metody zblokowane klasy:Użycie Interlocked.Exchange dla aktualizacji referencji i Int32
public static int Exchange(
ref int location1,
int value
)
i
public static T Exchange<T>(
ref T location1,
T value
)
where T : class
Więc pytanie brzmi, dlaczego Interlocked.Exchange jest potrzebne do Int32 i dla typów referencyjnych? Nie można tego zrobić bezpiecznie, po prostu za pomocą prostego zadania, ponieważ jest atomowy?
Dziękuję bardzo. Teraz jest to wystarczająco jasne. –
Wiem, że to oczywiście rok później, ale jeśli to możliwe, czy mógłbyś to sprawdzić? Ta strona http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/ wydaje się sugerować, że wszystkie zapisy w języku C# są już niestabilne. – user981225