随机数生成器只产生一个随机数的问题及解决方案
本文讨论一个随机数生成器函数RandomNumber
只产生一个随机数的问题。问题根源在于该函数每次调用时都创建一个新的Random
实例。由于Random
实例的内部状态基于系统时钟初始化,在紧密的循环中,多次调用会得到相同的值。
为了解决这个问题并确保随机数的准确性,应该创建一个Random
实例并重复使用。以下代码展示了如何实现:
<code class="language-csharp">private static readonly Random random = new Random(); private static readonly object syncLock = new object(); public static int RandomNumber(int min, int max) { lock (syncLock) { return random.Next(min, max); } }</code>
通过使用lock
语句,我们同步对Random
实例的访问,保证同一线程内每次调用RandomNumber
都会产生一个唯一的随机数。
另一种方法是使用ThreadLocal
变量为每个线程维护一个Random
实例,从而避免同步:
<code class="language-csharp">private static readonly ThreadLocal<Random> appRandom = new ThreadLocal<Random>(() => new Random());</code>
以上是为什么我的随机数生成器只会产生一个数字,我该如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!