📄 nodepool!1.cs
字号:
namespace NCindy.DataStructures
{
using NCindy.Threading;
using System;
public class NodePool<T> : NodeManager<T>
{
private LockFreeNode<T> m_head;
public NodePool()
{
this.m_head = new LockFreeNode<T>();
}
public override LockFreeNode<T> Allocate(T item)
{
LockFreeNode<T> @if;
do
{
@if = this.m_head.Next;
if (@if == null)
{
return new LockFreeNode<T>(item);
}
}
while (!InterlockedEx.IfThen<LockFreeNode<T>>(ref this.m_head.Next, @if, @if.Next));
@if.Item = item;
return @if;
}
public override void Free(LockFreeNode<T> node)
{
node.Item = default(T);
do
{
node.Next = this.m_head.Next;
}
while (!InterlockedEx.IfThen<LockFreeNode<T>>(ref this.m_head.Next, node.Next, node));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -