我有一个使用 pthreads 的程序。在每个线程中,使用 rand() (stdlib.h) 函数生成一个随机数。但似乎每个线程都在生成相同的随机数。这是什么原因??..我做错了什么吗??..谢谢
问问题
351 次
1 回答
1
rand()
是伪随机的,不保证是线程安全的,无论如何,您需要播种 rand()
:
std::srand(std::time(0)); // use current time as seed for random generator
std::rand()
有关更多详细信息,请参见cppreference.com。
示例程序可能如下所示:
#include <cstdlib>
#include <iostream>
#include <boost/thread.hpp>
boost::mutex output_mutex;
void print_n_randoms(unsigned thread_id, unsigned n)
{
while (n--)
{
boost::mutex::scoped_lock lock(output_mutex);
std::cout << "Thread " << thread_id << ": " << std::rand() << std::endl;
}
}
int main()
{
std::srand(std::time(0));
boost::thread_group threads;
for (unsigned thread_id = 1; thread_id <= 10; ++thread_id)
{
threads.create_thread(boost::bind(print_n_randoms, thread_id, 100));
}
threads.join_all();
}
注意伪随机数生成器是如何只用时间播种一次的(而不是每个线程)。
于 2013-02-01T04:36:33.803 回答