私は Deuce STM を初めて使用し、Deuce STM を使用してキューを実装するにはどうすればよいか疑問に思っていました。これが私の現在の作業実装です-
Node クラスには、value と次のフィールドへのポインタの 2 つのフィールドが含まれています。
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;
}
}
これはそれを実装する正しい方法ですか?トランザクション例外を手動でスローする必要がありますか? これが正しければ、中止または再試行されたトランザクションの数をどのように測定すればよいでしょうか?