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