所以,我很好奇人們如何通過rand_r命令在多個線程中獲得隨機值。如果我使用時間(NULL)作爲種子,那麼每個人都會以薩姆種子結束,因爲線程創建得如此接近。所有動作都基於隨機種子,因此所有線程在我的程序的其餘部分保持相同。如何獲得[使用RAND_R(* int seed)]在所有線程中有差異的隨機數?C89:使用rand_r()的多線程隨機值
在此先感謝。
所以,我很好奇人們如何通過rand_r命令在多個線程中獲得隨機值。如果我使用時間(NULL)作爲種子,那麼每個人都會以薩姆種子結束,因爲線程創建得如此接近。所有動作都基於隨機種子,因此所有線程在我的程序的其餘部分保持相同。如何獲得[使用RAND_R(* int seed)]在所有線程中有差異的隨機數?C89:使用rand_r()的多線程隨機值
在此先感謝。
您可以使用arc4random
來爲每個線程生成種子值。
的man page用於在Ubuntu Linux 14.04 rand_r提示:
值由
rand_r()
的seedp
說法指出,只提供了非常少狀態的 ,所以這個功能將是脆弱的僞隨機發電機。改爲嘗試drand48_r(3)
。
你可以調用'time(NULL)'獲得第一個種子和第二個種子。然後你可以使用第二個種子生成第三個種子。等等。 – 2014-11-03 21:41:13
剛剛使用seed = time(NULL)+ thread_id怎麼樣?或XOR他們。 – user515430 2014-11-04 02:38:39