using System.Threading; public class AtomicReference where T : class { private T value; public AtomicReference(T value) { this.value = value; } public bool CompareAndSet(T newValue, T prevValue) { T oldValue = value; if (oldValue == prevValue) { Interlocked.CompareExchange (ref value, newValue, prevValue); return true; } else { return false; } } public T Get() { return value; } }