void soProducerIndex(int idx, int m) { freelist.lazySet(m, idx & (m - 1)); } void soConsumerIndex(int idx, int m) {
void soConsumerIndex(int idx, int m) { freelist.lazySet(m + 1, idx & (m - 1)); } }
final void remove(FlatMapInnerSubscriber<T, R> inner) { AtomicIntegerArray fl = freelist; AtomicReferenceArray<FlatMapInnerSubscriber<T, R>> s = subscribers; int m = s.length(); int idx = inner.index; int pi = fl.get(m + PRODUCER_INDEX); s.lazySet(idx - 1, null); fl.lazySet(pi, idx); fl.lazySet(m + PRODUCER_INDEX, (pi + 1) & (m - 1)); }
final void remove(FlatMapInnerSubscriber<T, R> inner) { AtomicIntegerArray fl = freelist; AtomicReferenceArray<FlatMapInnerSubscriber<T, R>> s = subscribers; int m = s.length(); int idx = inner.index; int pi = fl.get(m + PRODUCER_INDEX); s.lazySet(idx - 1, null); fl.lazySet(pi, idx); fl.lazySet(m + PRODUCER_INDEX, (pi + 1) & (m - 1)); }
static IntSet readFrom(ObjectInput input) throws IOException { int arrayLength = UnsignedNumeric.readUnsignedInt(input); ConcurrentSmallIntSet intSet = new ConcurrentSmallIntSet(arrayLength << ADDRESS_BITS_PER_INT); int size = 0; for (int i = 0; i < arrayLength - 1; ++i) { int value = input.readInt(); // Use lazy set - we use set below on the last intSet.array.lazySet(i, value); size += Integer.bitCount(value); } int lastValue = input.readInt(); intSet.array.set(arrayLength - 1, lastValue); size += Integer.bitCount(lastValue); intSet.currentSize.addAndGet(size); return intSet; } }
public void remove(IndexedItem<T> iitem) { int idx = iitem.index; lazySet(idx - 1, null); int pi = lvProducerIndex(); freelist.lazySet(pi, idx); soProducerIndex(pi + 1, length()); }
AtomicIntegerArray array = new AtomicIntegerArray(100); array.addAndGet(1); array.lazySet(10, 123); int n = array.get(5); // volatile get array.set(9, 333); // volatile set.
fl.lazySet(m + CONSUMER_INDEX, (ci + 1) & (m - 1));
fl.lazySet(m + CONSUMER_INDEX, (ci + 1) & (m - 1));