[英]Properly seeding rand_r(int *val) method
所以我有多個線程將使用rand_r函數。 該功能的簽名是:
int rand_r(int *val);
我試圖利用時間播種這個功能,但我遇到了各種各樣的麻煩。 任何人都可以向我解釋如何使用時間調用rand_r,或者以其他簡單方式動態調度rand_r。
謝謝!
對於可重入版本的rand_r
,種子只是狀態的初始值。每個線程需要一個種子。 創建一個種子數組,或使種子變量線程本地:
_Thread_local unsigned int seed = time(NULL);
int do_stuff()
{
for ( ; ; )
{
int n = rand_r(&seed);
// use n
}
}
在UNIX / POSIX系統上,您可以打開/dev/urandom
獲取初始隨機數,讀取足夠的字節以獲取每個線程的種子。 Microsoft Windows有一種更精細的方式來獲取這些數字。 查看CryptGenRandom了解詳細信息。 由於這些是基於系統熵,因此它們不適用於高容量隨機數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.