Atomicità in C#
Da qualche giorno sono disponibili le specifiche complete di C# 3.0 con un testo unificato di 500 pagine che non è più una somma di funzioni da una versione all'altra. Rileggendo parte di cose già note, mi sono imbattuto in questa frase.
[...] Reads and writes of other types, including long, ulong, double, and decimal, as well as user-defined types, are not guaranteed to be atomic. [...] there is no guarantee of atomic read-modify-write, such as in the case of increment or decrement.
Questo implica la necessità di "proteggere" l'accesso a dati condivisi in ambito multithread anche su operazioni "semplici" su questi tipi di dati. Mentre su double e decimal ci si potrebbe scommettere, su long e ulong magari ci si trova un po' spiazzati, considerando che sono disponibili macchine a 64 bit. Ma, si sa, la compatibilità viene prima.