Соответствующий атомный указатель для использования в этом случае

Допустим, у меня есть реализация очереди Herlihy-Wing в Java:

public class HWQueue<T> {
AtomicReference<T>[] items;
AtomicInteger tail;
static final int CAPACITY = 1024;

public HWQueue() {
items =(AtomicReference<T>[])Array.newInstance(AtomicReference.class, CAPACITY);
for (int i = 0; i < items.length; i++) {
items[i] = new AtomicReference<T>(null);
// Each value in 'items' set to 'null'
// to indicate empty position for enqueue
}
tail = new AtomicInteger(0);
}

public void enq(T x) {
int i = tail.getAndIncrement();
items[i].set(x);
}

public T deq() {
while (true) {
int range = tail.get();
for (int i = 0; i < range; i++) {
T value = items[i].getAndSet(null);
if (value != null) {
return value;
}
}
}
}
}

Я использую тип atomic<int *> тип данных для items массив. Но в методе enqueue мне нужно сделать что-то вроде items[i].store(&x) что, очевидно, неправильно, поскольку это свисающая ссылка. Как правильно сделать эту операцию? Если я использую кучу, я тоже не знаю, когда освободить эту память. Как мне этого добиться?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …