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!