我正在尝试使用 C++11 随机数生成器来洗牌。我发现(通过查看实现)如果引擎以相同的值作为种子,则两个引擎产生的随机数序列是相同的。
考虑以下代码:
DECK::DECK()
{
// Initialize deck to contain the standard 52 cards in an unsorted manner.
}
void DECK::shuffle()
{
std::default_random_engine e;
// Use 'e' to shuffle the deck
}
int main(int, char* [])
{
DECK d1, d2;
d1.shuffle();
d2.shuffle();
// 'd1' and 'd2' are identical!
}
以下是规格:
1) 程序输出是确定性的(即相同的输入产生相同的输出)。
2) 多个线程需要同时洗牌。
3) 性能至关重要。我不想使用锁(除非没有其他选择)。
由于规范 #1,我无法使用系统时间为 std::default_random_engine 播种。由于规范 #2 和 #3,使引擎成为单例似乎不是一种选择。有没有人有更好的方法来编码?