我正在寻找类似于Interlocked.Increment(ref counter)
的线程安全可排队计数器。通过排队,我的意思是能够按顺序获取下一个数字,但是当我完成它时,将其返回到队列的顶部。类似的东西已经构建到C#中了吗?
示例:我按顺序取(0,1,2,3,4,5)。然后我返回4.然后我返回1.所以队列中的下一个数字是(1,4,6,7等)
编辑:
谢谢大家的帮助。我相信以下内容可以满足我的需求:
ConcurrentStack<int> _stack = new ConcurrentStack<int>();
private int _max;
public EntityStack()
{
_stack.Push(0);
_max = 0;
}
public int GetNextHandle()
{
int handle;
var success = _stack.TryPop(out handle);
if (_stack.Count == 0)
{
_max += 1;
_stack.Push(_max);
}
return handle;
}
public void ReturnHandle(int handle)
{
_stack.Push(handle);
}
答案 0 :(得分:0)
如果您不关心返回的号码,那么您只需要任何可以接受和提供的号码。任何实现IProducerConsumerCollection<T>
接口的类都将执行:
BlockingCollection<T>
ConcurrentQueue<T>
ConcurrentStack<T>