Массив на основе блокировки без блокировки. Полный забор необходим?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Массив на основе блокировки без блокировки. Полный забор необходим?

Сообщение Anonymous »

Я новичок в алгоритмах без блокировки и пытаюсь реализовать Stack , которая является самой простой структурой данных без блокировки. Вот моя реализация ограниченного стека на основе блокировки на основе массива. < /P>

Код: Выделить всё

public class ConcurrentArrayStack implements Stack {
private final AtomicInteger size;
private final T array[];

public ConcurrentArrayStack(int maxCapacity) {
this.array = (T[]) new Object[maxCapacity];
this.size = new AtomicInteger(0);
}

@Override
public T push(T t) {
if(t == null) {
throw new NullPointerException("Null values are not allowed");
}

int currentSize;
T currentValue;
do {
currentSize = size.get();
if(currentSize == array.length) {
return null;
}
currentValue = array[currentSize];
} while(currentValue != null || !size.compareAndSet(currentSize, currentSize + 1));
array[currentSize] = t;
VarHandle.fullFence(); //  в конце каждого метода заключается Барьер компилятора (промыть любое ожидающее чтение/запись на уровне компилятора)  Нам не нужен забор между нагрузкой от массива и хранением до массива, поскольку нагрузки не переупорядочиваются в более ранние магазины (x86). < /li>
< /ol>
[b] Вопрос: [/b] то, что я не мог проверить, что Fullfence 
строго говорит здесь и не может быть заменена на --. Возможно ли что -то подобное?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -necessary
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»