我需要生成三個填充了隨機整數的 .txt 檔案,在單獨的執行緒中呼叫生成函式。
問題是,結果我在每個 .txt 檔案中都有相同的值。
一個生成并寫入值的函式:
void generateMoves(int limit, std::string outputPath) {
//open fstream
std::ofstream fout;
fout.open(outputPath);
if (!fout.is_open()) {
std::cout << "Error reading " << outputPath << " file. Exiting..." << std::endl;
exit(1);
}
static thread_local std::mt19937 generator;
std::uniform_int_distribution<int> distribution(1, 3);
//generating & writing moves
for (int i = 0; i < limit; i ) {
int value;
value = distribution(generator);
fout << value << std::endl;
}
fout.close();
}
我從 main() 呼叫這樣的執行緒:
int limit = 1000;
std::thread player1(generateMoves, limit, "player1.txt");
std::thread player2(generateMoves, limit, "player2.txt");
std::thread player3(generateMoves, limit, "player3.txt");
player1.join();
player2.join();
player3.join();
那么,如何正確分離 int 代?
編輯:按照下面的評論,我將不同的種子放入每個執行緒,現在一切正常。隨機生成現在看起來像這樣:
// put different *s* into each thread
srand(s);
//generating & writing
for (int i = 0; i < limit; i ) {
int value;
value = rand() % 3 1;
fout << value << std::endl;
}
uj5u.com熱心網友回復:
正如評論所述,您的所有生成器都是從相同的默認種子創建的。給每個生成器一個不同的種子就足夠了:
std::random_device rd1;
static thread_local std::mt19937 generator(rd1());
這使用 (非常慢) std::random_device,但僅用于為 mt 生成器生成唯一的種子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371840.html
