使用线程生成唯一随机数

时间:2013-02-01 04:32:29

标签: c++ random pthreads

我有一个使用pthreads的程序。在每个线程中,使用rand()(stdlib.h)函数生成随机数。但似乎每个线程都生成相同的随机数。这是什么原因??我做错了什么??谢谢

1 个答案:

答案 0 :(得分:1)

rand()pseudo-random并且不保证是线程安全的,无论如何,您需要种子 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();
}

请注意伪随机数生成器的播种时间仅为一次(而不是线程)。