Brian Goetz tarafından JCIP okuyordum. CAS talimatını kullanarak bloke olmayan bir sayacın uygulanmasını açıklar. CAS komutunu kullanarak artışın nasıl olduğunu anlayamadım. Bunu anlamama yardım eden var mı? Başka kimse ise sayacın geçerli değerini alırCAS ve Sigara Engelleme Sayacı
int old = value.val;
if (old == v) {
value.val = v + 1;
}
return old;
Şimdi
v = value.get()
(detaylar için compare-and-swap bakın) ve:
public class CasCounter {
private SimulatedCAS value;
public int getValue() {
return value.get();
}
public int increment() {
int v;
do {
v = value.get();
}
while (v != value.compareAndSwap(v, v + 1));
return v + 1;
}
}