Mercurial > hg > Database > jungle-sharp
diff src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/AtomicReference.cs @ 7:02b2ab7bffe6
fix
author | Kazuma |
---|---|
date | Tue, 27 Sep 2016 18:36:05 +0900 |
parents | dec15de2c6ff |
children |
line wrap: on
line diff
--- a/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/AtomicReference.cs Tue Jul 05 07:20:41 2016 +0900 +++ b/src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/AtomicReference.cs Tue Sep 27 18:36:05 2016 +0900 @@ -2,27 +2,17 @@ public class AtomicReference <T> where T : class { private T value; - private bool isSet = false; - - public AtomicReference() { } public AtomicReference(T value) { this.value = value; } - public T CompareAndSet(T newValue) { + public bool CompareAndSet(T newValue, T prevValue) { // change to compere exchange. - isSet = true; - return Interlocked.CompareExchange(ref value, value, newValue); + T oldValue = value; + return (oldValue != Interlocked.CompareExchange (ref value, newValue, prevValue)); } - - public bool OptimicSet(T oldvalue) { - T old; - do { - old = value; - } while (old != CompareAndSet (value)); - return isSet; - } + public T Get() { return value;