簡體   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