【发布时间】:2011-09-03 21:59:10
【问题描述】:
我有几个线程都运行相同的功能。在每一个中,它们都会多次生成不同的随机数。我们试图通过将srand(time(0)) 放在函数的开头来做到这一点,但似乎它们都得到了相同的数字。
我们是否需要在每个程序中只调用一次srand(time(0)),即在main 的开头(例如),在每个被多次调用的函数的开头,还是其他什么地方?
【问题讨论】:
-
使用 C++0x 中的新随机数生成器可能会更好。你用的是什么编译器?
-
你使用的是什么操作系统 windows/linux ??
-
如果所有的胎面都使用相同的 srand() 你会得到相同的随机数
-
不要从多个线程调用 rand()。使用 C++0x 中的随机数生成器。这些在 Boost 中也可用。
-
我观察到 rand() 每次线程启动时都会以相同的顺序启动。在我的应用程序中,我在一个循环中启动一个线程,然后 rand() 在每次迭代中重复相同的序列。 rand() 绝对是多线程的禁忌。我通过使用上面建议的那些较新的 C++ 生成器解决了这个问题。
标签: c++ c multithreading random