Hallo!
Ich versuche gerade eine LinkedList mit Hilfe von Reentrent Lock zu synchronisieren. Aber es funktioniert nicht richtig.
Das Problem ist, dass Elemente doppelt eingesetzt werden.
Weiss jemand woran das liegt?
Ich versuche gerade eine LinkedList mit Hilfe von Reentrent Lock zu synchronisieren. Aber es funktioniert nicht richtig.
Java:
public void insert(int index, Object elem) {
if (!isInRemovedNodesList(index) && inRemove == false) {
if (index < 0 || index > size) {
throw new IndexOutOfBoundsException();
}
if (index == 0 && size == 0) {
synchronized (this) {
if (head == null) {
Node<E> newNode = new Node<E>(elem, null);
newNode.next = head;
head = newNode;
size++;
}
}
} else {
head.lock.lock();
Node<E> n = head;
for (int i = 0; i < index; i++) {
n = n.next;
}
head.lock.unlock();
if (n == null) {
head.lock.lock();
Node<E> nn = head;
for (int i = 0; i < index - 1; i++) {
nn = nn.next;
}
head.lock.unlock();
Node<E> pred = nn;
pred.lock.lock();
Node<E> newNode = new Node<E>(elem, null);
newNode.next = pred.next;
pred.next = newNode;
pred.lock.unlock();
size++;
}
}
}
}
Das Problem ist, dass Elemente doppelt eingesetzt werden.
Java:
7 8 9 10 11 12 12 13 13 14 15 16
Weiss jemand woran das liegt?