c#中的线程安全可排队计数器

时间:2018-03-12 17:52:37

标签: c# queue thread-safety

我正在寻找类似于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);
    }

1 个答案:

答案 0 :(得分:0)

如果您不关心返回的号码,那么您只需要任何可以接受和提供的号码。任何实现IProducerConsumerCollection<T>接口的类都将执行:

  • BlockingCollection<T>
  • ConcurrentQueue<T>
  • ConcurrentStack<T>