Очередь с использованием двойки STM

1

Я новичок в 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;
}

}

Это правильный способ его реализации? Нужно ли вручную перебрасывать транзакционное исключение? Если это правильно, то как мы измеряем количество транзакций, прерванных или повторных?

Теги:
multithreading
atomic
transactions
stm

1 ответ

0

Я никогда не работал с DeuceSTM. Сказав это, несколько примечаний:

  • Кажется, ваш пустой чек неверен; Должно быть if (node == sentinel) на основе вашего конструктора.
  • Это сообщение от Гая Корланда приводит меня к мысли, что статистика не реализована; Вам придется изменить объект Context, который кажется...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню