Mar*_*ark 13 c++ random multithreading stl
是std :: random_shuffle线程安全吗?我认为不是因为常规的rand()不是线程安全的.如果是这种情况,我将如何将rand_r与random_shuffle一起使用,以便为每个线程提供唯一的种子.我已经看到了使用随机随机生成器和random_shuffle的例子,但我仍然不清楚.
谢谢.
要使用rand_rwith std::random_shuffle,您需要编写一个(相当简单的)包装器。您传递给的随机数生成器random_shuffle需要接受一个指定要生成的数字范围的参数,但事实rand_r并非如此。
你的包装看起来像这样:
class rand_x {
unsigned int seed;
public:
rand_x(int init) : seed(init) {}
int operator()(int limit) {
int divisor = RAND_MAX/(limit+1);
int retval;
do {
retval = rand_r(&seed) / divisor;
} while (retval > limit);
return retval;
}
};
Run Code Online (Sandbox Code Playgroud)
你可以将它与random_shuffle类似的东西一起使用:
std::random_shuffle(whatever.begin(), whatever.end(), rand_x(some_seed));
Run Code Online (Sandbox Code Playgroud)