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...
Tale codice verrà richiamato dal main con una dicitura del tipo: (nameDataStructure, nrThreads, nrItems, workTime, debug)..ad esempio: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(); } }
lfl 10 20 30 debug
Spero proprio che qualcuno di voi possa darmi una mano!!
Grazie in anticipo!


Rispondi quotando