繁体   English   中英

为什么我需要在线程中使用 rand_r() 以及为什么我需要为每个线程使用不同的种子?

[英]why I need to use rand_r() in threads and why I need different seed for each threads?

我不明白为什么我必须使用rand_r()在线程 function 中生成随机数。 还有为什么我需要为每个线程使用不同的种子。

为什么我需要在线程中使用 rand_r()

rand的文档: function rand() 不是可重入的或线程安全的,...这可以使用可重入的 function rand_r() 来完成。

为什么我需要为每个线程使用不同的种子?

您不需要,您可以选择在所有线程中使用或不同的种子

为什么我需要不同的种子?

rand_r()是一个伪随机数生成器。 也就是说,它生成一个伪随机数字序列:每次调用都返回序列中的下一个数字。

“随机”的意思是“不可预测的”。 如果你有一个真正随机数字序列的生成器,你将无法预测序列中的下一个数字,无论你已经知道多少前面的数字。

随机”在某些方面就像一个随机序列——在某些应用程序中可以随机一样使用——但它根本不是随机的。 事实上,它是 100% 可预测的。 要预测序列中的下一个数字,您只需要知道生成器的 state 及其使用的算法。

伪随机生成器的种子提供了一种将生成器放入已知的、可重复的 state 的方法。 如果您为生成器的两个不同实例提供相同的种子,则两个生成器将返回完全相同的值序列。


您是否希望每个线程都获得与其他线程完全相同的序列? 由你决定。 如果这就是你想要的,那么用相同的值播种每一个。 如果您希望它们获得不同的“随机”数字,则为每个生成器播种不同的值。

此外,如果您希望程序的不同运行获得不同的“随机”值,那么您必须在每次运行程序时使用不同的值作为种子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM