我正在调用newSeed()和rand()类的Random静态成员函数。 newSeed()提供了Random类的静态成员(我们称之为种子)。更具体的,我并行调用该函数在另一个类,方法类:静态成员和多线程
double* Method::randomPoint(double* bottom_, double* top_)
{
try{
Random generator_ ;
double* pt_ = new double[m_ndim];
generator_.newSeed();
for(int i=0;i<m_ndim;i++)
{
pt_[i]= generator_.rand(bottom_[i],top_[i]);
}
return pt_;
}
catch(...)
{
return NULL;
}
}
综上所述,在每个并行调用,我创建Random类的新实例,我叫newSeed()和rand()方法在这个对象中。由于在给定的实例上调用newSeed(),我希望newSeed()初始化此对象的种子成员 - 因此仅针对此线程。由于种子是静态的,并且newSeed()也是静态的,我是否正在为所有当前正在运行的Random类(以及所有线程)的实例修改种子?
请告诉我,如果问题必须澄清。
感谢和问候。
如果newSeed是一个静态方法,它将改变所有线程的种子。你只应该种一次PRNG,不需要多次。 – 2012-04-10 07:12:49
没有看到Random类的定义很难说。你说这些方法是静态的,所以没关系它是每个线程上的一个新实例,但是可能存在用于种子的线程本地存储,所以它可能每个线程都不相同。不发布随机类的代码,你不能得到明确的答案。 – 2012-04-10 07:15:44