C# 用于旋转数字读取的线程安全收集

C# 用于旋转数字读取的线程安全收集,c#,multithreading,C#,Multithreading,我想知道C#中是否有一个内置的集合(或任何定制集合的方法),可以用来以旋转/循环的方式发送数字(请参见下面的示例),并且是线程安全的(因此每个线程都会获得集合中的下一个数字) 具有5个序列号的集合: 线程1读取:返回值1 线程2读取:返回值2 线程3读取:返回值3 线程4读取:返回值4 线程5读取:返回值5 线程6读取:返回值1 线程7读取:返回值2 线程8读取:返回值3 等等 基本上,集合发出的下一个数字(当被线程读取时)应该是前一个数字之后的一个,并且应该从数字集末尾的开始处重新启动。您

我想知道C#中是否有一个内置的集合(或任何定制集合的方法),可以用来以旋转/循环的方式发送数字(请参见下面的示例),并且是线程安全的(因此每个线程都会获得集合中的下一个数字)

具有5个序列号的集合:

线程1读取:返回值1
线程2读取:返回值2
线程3读取:返回值3
线程4读取:返回值4
线程5读取:返回值5
线程6读取:返回值1
线程7读取:返回值2
线程8读取:返回值3
等等


基本上,集合发出的下一个数字(当被线程读取时)应该是前一个数字之后的一个,并且应该从数字集末尾的开始处重新启动。

您可以将一个方法变大,该方法将返回infinate enumerable:

    private object _lock = new object();
    private int i = 0;
    private int max = 6;

    public IEnumerable<int> GetNumbers()
    {
        while (true)
        {
            lock (_lock)
            {
                i++;
                if (i == max)
                    i = 1;
                yield return i;
            }
        }

    }

互锁。与模一起递增?线程将如何处理这些数字。有没有可能你正试图重新发明某种分区机制?@Damien_The_unsiver的观点很好。把这些数字想象成IP地址。线程将只使用这些数字轮流分配IP地址,从而减少对任何一个IP的随机过度分配?不,“任何方式”?当然可以。有无数种可能的方法,你可以做一个。你试过什么?它做了什么?为什么没有达到你的目标呢?谢谢@muzzlator,
互锁。增量
是我想要实现循环机制的东西。
var numbers = GetNumbers().Take(1000).ToArray();