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;