Salve,
stò cercando di implementare una lista lock-free per un esame di concurrency&multithreading..scrivendo questo codice mi sono reso conto che entra in loop e non ne esce più e non riesco proprio a capire cosa ci possa essere di sbagliato. Vi posto il codice della classe Java...
codice:
package data_structures.implementation;
import data_structures.Sorted;
import java.util.concurrent.atomic.*;
public class LockFreeList<T extends Comparable<T>> implements Sorted<T> {
private class Node{
public T item;
AtomicMarkableReference<Node> next;
// the node is composed by an item value and a next field with successor and boolean mark
Node(T item, Node next){
this.item = item;
this.next = new AtomicMarkableReference(next, false);
}
}
private AtomicMarkableReference<Node> head = new AtomicMarkableReference(new Node(null, null), false);
private AtomicMarkableReference<Node> tail = head;
@Override
public void add(T item) {
Node newNode = new Node(item, null);
boolean[] marked = {false};
while(true){
Node curr = tail.get(marked);
Node succ = curr.next.get(marked);
if(curr == tail.get(marked)){
if(succ == null){
if(curr.next.compareAndSet(null, newNode, false, false))
tail.compareAndSet(curr, newNode, false, false);
return true;
}
} else {
tail.compareAndSet(curr, succ, false, false);
}
}
}
public void remove(T t) {
//throw new UnsupportedOperationException();
}
}
Tale codice verrà richiamato dal main con una dicitura del tipo: (nameDataStructure, nrThreads, nrItems, workTime, debug)..ad esempio:
lfl 10 20 30 debug
Spero proprio che qualcuno di voi possa darmi una mano!!

Grazie in anticipo!