Я новичок в Deuce STM и задавался вопросом, как мне начать реализацию очереди с помощью Deuce STM. Вот моя текущая работа -
Класс Node содержит два поля - значение и указатель на следующее поле.
public class STMQueue {
Node head, tail;
public STMQueue() {
Node sentinel = new Node(-1);
tail = sentinel;
head = sentinel;
}
@Atomic
public void enq(int x) {
Node node = new Node(x);
tail.next = node;
tail = node;
}
@Atomic
public int deq() throws EmptyException{
Node node = head.next;
if(node == null) {
throw new EmptyException();
}
int retVal = node.value;
head = node;
return retVal;
}
}
Это правильный способ его реализации? Нужно ли вручную перебрасывать транзакционное исключение? Если это правильно, то как мы измеряем количество транзакций, прерванных или повторных?
Я никогда не работал с DeuceSTM. Сказав это, несколько примечаний:
if (node == sentinel)
на основе вашего конструктора.