kir*_*off 2 c++ static multithreading
我正在并行调用newSeed()和rand(),类Random的静态成员函数.newSeed()提供Random类的静态成员(让我们称之为种子).更具体地说,我在另一个类Method类中并行调用此函数:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
总而言之,在每个并行调用中,我创建了一个新的Random类实例,我在这个对象中调用了newSeed()和rand()方法.由于newSeed()是在给定的实例上调用的,我希望newSeed()初始化此对象的种子成员 - 因此只对此线程进行初始化.由于种子是静态的并且newSeed()也是静态的,我是否为所有当前运行的Random类实例(以及所有线程)修改种子?
请告诉我是否必须澄清问题.
感谢致敬.
静态字段在进程类的所有实例之间共享.此外,线程在相同的进程中运行,这意味着使用相同的类共享内存
因此,如果修改静态字段种子,则所有线程中的所有"Random"实例都将进行修改.