Laden...

Lockfreier threadsicherer Stack

Erstellt von Floste vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.545 Views
Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 14 Jahren
Lockfreier threadsicherer Stack

Beschreibung:

Besonders einfacher threadsicherer Stapel, der ohne Locks auskommt:


    public class LockFreeStack<T>
    {
        Node top;

        public void Push(T item)
        {
            Node newNode = new Node();
            newNode.item = item;
            Node old;
            do
            {
                old = top;
                newNode.down = old;
            }
            while (old != Interlocked.CompareExchange(ref top, newNode, old));
        }

        public bool Pop(out T item)
        {
            Node current;
            do
            {
                current=top;
                if(current==null)
                {
                    item=default(T);
                    return false;
                }
            }
            while(current!=Interlocked.CompareExchange(ref top,current.down,current));
            item=current.item;
            return true;
        }

        class Node
        {
            public T item;
            public Node down;
        }
    }

Siehe auch:
Lockfreie threadsichere Queue
Interlocked modify & threadsichere events

Lock free stack, non blocking, lockfree

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!