gpt4 book ai didi

c++ - 静态成员和多线程

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:47 25 4
gpt4 key购买 nike

我正在并行调用 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;
}
}

总而言之,在每个并行调用中,我创建了一个类 Random 的新实例,我在该对象中调用了 newSeed() 和 rand() 方法。由于在给定实例上调用了 newSeed(),我希望 newSeed() 初始化该对象的种子成员——因此仅针对该线程。由于种子是静态的并且 newSeed() 也是静态的,我是否正在为所有当前正在运行的 Random 类实例(以及所有线程)修改种子?

如果问题必须澄清,请告诉我。

感谢和问候。

最佳答案

静态字段在进程类的所有实例之间共享。此外,线程在同一个进程中运行,这意味着它们共享内存,使用相同的类

因此,如果您修改静态字段种子,则所有线程中的所有“随机”实例都将进行修改。

关于c++ - 静态成员和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10084509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com