Mar*_*rkB 1 random multithreading stl c++11
我正在尝试使用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!
}
Run Code Online (Sandbox Code Playgroud)
以下是规格:
1)程序输出是确定性的(即相同的输入产生相同的输出).
2)多线程需要同时洗牌的DECK.
3)表现至关重要.我想不使用锁(除非没有其他选择).
由于规范#1,我无法使用系统时间播种std :: default_random_engine.由于规范#2和#3,使引擎成为单身似乎不是一种选择.有没有人有更好的方法来编写这个?
使用一个 RNG创建种子.种子第一个带有输入数字的RNG,然后从它接下来的两个数字作为另外两个RNG的种子(每个甲板一个).这样你将拥有两个独立的RNG,但它们仍然是原始输入的确定性.
只要每个线程只使用一个RNG,从多个线程使用RNG这一事实并不重要.(我假设线程不以非确定的方式相互交互.)
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |