Multithreading 多线程真随机数

Multithreading 多线程真随机数,multithreading,random,Multithreading,Random,一个程序只能产生伪随机数,因为它总是确定性的。但是,由于调度/缓存/交换等因素的影响,使用多线程时会出现非确定性。 你能用这种效应产生真正的随机数吗?因为这不仅取决于确定性代码,还取决于物理现象,如延迟等。这一直在使用。如果您在许多类Unix系统上阅读/dev/random,可能会在熵中混入“环境”效应。但不要将其过度解读为“真正的随机数”。您所描述的效果仍然只在有限的范围内变化,在某些情况下可能在非常有限的范围内变化,因此它们非常接近确定性(如果您围绕RNG构建安全性,“关闭”通常就足够了)

一个程序只能产生伪随机数,因为它总是确定性的。但是,由于调度/缓存/交换等因素的影响,使用多线程时会出现非确定性。
你能用这种效应产生真正的随机数吗?因为这不仅取决于确定性代码,还取决于物理现象,如延迟等。

这一直在使用。如果您在许多类Unix系统上阅读
/dev/random
,可能会在熵中混入“环境”效应。但不要将其过度解读为“真正的随机数”。您所描述的效果仍然只在有限的范围内变化,在某些情况下可能在非常有限的范围内变化,因此它们非常接近确定性(如果您围绕RNG构建安全性,“关闭”通常就足够了)

这个问题的经典版本是路由器启动并使用来自网络的延迟信息播种其RNG。在非常嘈杂的网络中,这可能是非常随机的。在一个相当安静的网络中,这可能是非常可预测的。这是一个非常现实的问题,在嵌入式系统中很难解决

从中得到的一个教训是避免发明自己的RNG,特别是如果您正在其上构建安全系统。研究您的系统提供的RNG,并使用它们(或者在开始新的解决方案之前研究加密随机数生成)


如果您对本主题感兴趣,可以提供一些很好的介绍材料,以及基于大气数据的实现。(即使这是“真正的随机”还是“基于我们不知道的状态的确定性”都是物理学家的一个论据,但它与我们的论据非常接近。)

这个问题是一个家庭作业问题,在堆栈中没有位置。此外,OP没有做出任何努力。你可能想回顾这篇文章:。也许这不是一个实际的问题,也许作者只是意识到这是事实,需要与社区分享他们的顿悟?也许作者对他的问题是认真的。。。也许有人更喜欢回答问题,而不是质疑op的意图。