gpt4 book ai didi

.net - 如何在.NET中为每个不同的线程生成不同的随机数?

转载 作者:行者123 更新时间:2023-12-03 13:16:27 28 4
gpt4 key购买 nike

我必须生成19位随机数。但是,有一个限制-运行某些代码时,两个线程可能不会生成相同的随机数。

最简单的解决方案是锁定整个代码。但是,我想知道是否有非锁定解决方案。我以为可以将ManagedThreadId合并到产生的随机数中,但是Internet上的ManagedThreadId文档提到它可能涵盖整个Int32范围。非托管线程ID似乎仅限于11位,但这仍然给我留下了8个真正的随机位。

还有其他方法吗?可能以某种方式利用线程本地存储吗?

谢谢。

编辑

我想清除一些东西。随机数可能会重复,最终这是不可避免的。我要避免的是,如果两个线程同时输入了一段代码,那么这些线程可能不会使用相同的随机数,这是可以保证的。在执行该代码之前或之后-很好,但不在代码本身内。同样,我可以使用一些锁定方案来防止这种情况,但是我想先检查一下非锁定方案。

编辑2

阅读对我的问题的评论/答案,我了解到我只能避免锁定特定代码。但是,出于纯粹的学术好奇心,我仍然很想知道是否有人对我的原始问题有一个好的解决方案-在多个线程中生成19位随机数,考虑到这些数字在线程之间是不同的ManagedThreadId可能非常大,以至于太大,以至于简单地将其聚合在随机数内是不好的-实际的随机位不留空间。

最佳答案

那么您实际上要使用多少个线程?那是限制因素。如果只需要(说)8个线程,那么您可能会丢失3位信息。您可以创建一个“发电机工厂”,该工厂知道允许创建多少个发电机,如果尝试创建太多发电机,则会引发异常。

尽管您对不同数字的要求不是很清楚-即使您确保一个线程永远不会创建与另一个线程已经创建的相同数字,但您仍然必须担心是否在同一线程上创建重复的数字。对您来说这是一个问题吗?

关于.net - 如何在.NET中为每个不同的线程生成不同的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2533496/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com