0
我有一個使用pthreads的程序。在每個線程中使用rand()(stdlib.h)函數生成一個隨機數。但似乎每個線程都生成相同的隨機數。是什麼原因爲何?...難道我做錯了什麼?..謝謝使用線程的唯一隨機數生成
我有一個使用pthreads的程序。在每個線程中使用rand()(stdlib.h)函數生成一個隨機數。但似乎每個線程都生成相同的隨機數。是什麼原因爲何?...難道我做錯了什麼?..謝謝使用線程的唯一隨機數生成
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();
}
注意僞隨機數生成器是如何接種的時間只有一次(和每不是線程)。
感謝您的回答。但是這個種子代表什麼? –
隨機種子只是一個用於初始化僞隨機數生成器的數字。 – Johnsyweb
@Zeus就像你從不同種子獲得不同形式和種類的植物一樣,你從不同的隨機發生器種子獲得不同的數字集。 –