Meines Verständnisses nach ist Interlocked nur garantiert, wenn es von anderen Interlocked Methoden zugegriffen wird. Dies kann besonders wichtig sein, wenn es um 64-Bit-Werte auf x86-Systemen geht, wo nicht garantiert werden kann, dass sie atomar sind, so dass Torn Values ein Problem darstellen. Ein guter Trick zum robusten Lesen eines Wertes, der von Interlocked geändert werden kann, ist CompareExchange:
int val = Interlocked.CompareExchange(ref field, 0, 0);
Dies ändert den Wert von field
auf 0, aber nur, wenn der alte Wert 0 war - ansonsten tut es nichts. So oder so wird der alte Wert zurückgegeben. Also im Grunde genommen: Es liest den Wert, ohne ihn jemals zu ändern, und ist sicher gegen andere Interlocked Methoden.