2013-02-01 74 views
0

我有一個使用pthreads的程序。在每個線程中使用rand()(stdlib.h)函數生成一個隨機數。但似乎每個線程都生成相同的隨機數。是什麼原因爲何?...難道我做錯了什麼?..謝謝使用線程的唯一隨機數生成

回答

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(); 
} 

注意僞隨機數生成器是如何接種的時間只有一次(和不是線程)。

+0

感謝您的回答。但是這個種子代表什麼? –

+0

隨機種子只是一個用於初始化僞隨機數生成器的數字。 – Johnsyweb

+2

@Zeus就像你從不同種子獲得不同形式和種類的植物一樣,你從不同的隨機發生器種子獲得不同的數字集。 –