2014-11-03 16 views
0

所以,我很好奇人們如何通過rand_r命令在多個線程中獲得隨機值。如果我使用時間(NULL)作爲種子,那麼每個人都會以薩姆種子結束,因爲線程創建得如此接近。所有動作都基於隨機種子,因此所有線程在我的程序的其餘部分保持相同。如何獲得[使用RAND_R(* int seed)]在所有線程中有差異的隨機數?C89:使用rand_r()的多線程隨機值

在此先感謝。

+0

你可以調用'time(NULL)'獲得第一個種子和第二個種子。然後你可以使用第二個種子生成第三個種子。等等。 – 2014-11-03 21:41:13

+0

剛剛使用seed = time(NULL)+ thread_id怎麼樣?或XOR他們。 – user515430 2014-11-04 02:38:39

回答

0

您可以使用arc4random來爲每個線程生成種子值。

1

man page用於在Ubuntu Linux 14.04 rand_r提示:

值由rand_r()seedp說法指出,只提供了非常少狀態的 ,所以這個功能將是脆弱的僞隨機發電機。改爲嘗試drand48_r(3)

+3

這是如何回答這個問題的?更不用說這隻適用於Ubuntu,手冊頁可能會在另一個平臺上陳述不同的內容。 – 2014-11-03 20:34:10

+0

感謝您的迴應。我的任務是要求我爲我的睡眠時間找到一個隨機數,但它堅持使用rand_r ...我看到了這個,但試圖在指南中找到答案 – guitar80 2014-11-03 20:46:54

+0

唯一的建議是必須使用全局變量種子變量,並且只在程序開始時填充它,即不在每個'rand_r()'調用之前。 – TonyB 2014-11-03 20:54:35