2011-10-19 14 views
6

Specyfikacja C# mówi, że czytanie i pisanie jest atomiczne dla typów 32-bitowych i mniejszych (jak również dla odniesień). Więc jeśli mam pole Int32 w mojej klasie, wiem, że wiele wątków może czytać i zapisywać do niego i będą one atomowe w działaniu, więc wartość zawsze będzie stała (chociaż problemy z buforowaniem są potencjalnym problemem, ale nie o to chodzi tego pytania).Atomowy rozmiar odczytu/zapisu w systemach 64-bitowych dla .NET?

Czy to samo dotyczy systemów 64-bitowych? Czy jeśli skompiluję moją aplikację na 64-bitową, oznacza to, że Int64 nadal nie jest atomowy? Czy mogę teraz uznać, że Int64 jest atomowy w trybie odczytu/zapisu, ponieważ został skompilowany i uruchomiony w systemie 64-bitowym?

+1

W razie wątpliwości, oczywiście, "Interlocked" - ale jest to bardzo dobre pytanie. –

Odpowiedz

3

Powinien być taki sam (nie atomowy) - wartości muszą być odpowiednio wyrównane, aby umożliwić 64-bitowym wartościom posiadanie zapisu/odczytu atomowego, ale o ile wiem, nie ma wymogu, aby CLR zawsze wyrównywał wartości Int64 w ten sposób .

Zapoznaj się z How to guarantee 64-bit writes are atomic?, aby porozmawiać na ten temat.

Powiązane problemy