reference assignment is atomic so why is Interlocked.Exchange(ref Object, Object) needed? reference assignment is atomic so why is Interlocked.Exchange(ref Object, Object) needed? multithreading multithreading