提升多线程向量的返回值
Boost returning values from multithread vector
我正在尝试开发一个代码,将N个线程生成到循环中。每个线程生成 40 个随机数,并从中选择最高的随机数。之后,我必须从所有数字中选择最高的数字。但是,当我返回每个线程的最大值 (b) 时,它是空的,这是我正在使用的代码:
class rdm_thr
{
public:
rdm_thr()
{
}
void rdmgen()
{
default_random_engine generator;
double rdm;
b=0;
normal_distribution<double> normal(0, 1);
for(int i=0; i<40; i++)
{
rdm = normal(generator);
if(rdm>b)
b = rdm;
}
}
};
void main()
{
vector<boost::thread *> z;
vector<rdm_thr> o;
boost::function<void()> th_func;
for (int i = 0; i < 2; i++)
o.push_back(rdm_thr());
for (int i = 0; i < 2; i++)
{
th_func = boost::bind(&rdm_thr::rdmgen, &o[i]);
boost::thread thr(th_func);
z.push_back(&thr);
}
for (int i = 0; i < 2; i++)
{
z[i]->join();
}
}
有没有其他方法可以做到这一点?
您可以这样更改类逻辑:
class rdm_thr
{
public:
rdm_thr() {}
void rdmgen()
{
...
}
void join() { t.join(); }
void start()
{
t = boost::thread(boost::bind(&rdm_thr::rdmgen, this));
}
private:
boost::thread t;
// could also be pointer type and 'new/delete' would have to be used in that event
};
#define TSZ 2
void main()
{
std::vector<rdm_thr*> o;
int i = 0;
for (; i < TSZ; i++) {
o.push_back(new rdm_thr());
o.back()->start();
}
for (i = 0; i < TSZ; i++) {
o[i]->join();
delete o[i]; //clean up
}
}
如果你不想改变你的类逻辑,你可以在你的主函数中执行以下操作:
#define TSZ 2
void main()
{
std::vector<boost::thread *> z;
std::vector<rdm_thr *> o;
int i = 0;
for (; i < TSZ; i++) {
o.push_back(new rdm_thr());
z.push_back(new boost::thread(boost::bind(&rdm_thr::rdmgen, o.back())));
}
for (i = 0; i < TSZ; i++) {
z[i]->join();
delete z[i];
delete o[i];
}
}
我现在无法访问编译器,所以我无法验证 100%,但随着您对理论的更多要求,上面的代码有助于说明实现类似结果的替代方法。
我希望这能有所帮助
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 进程退出,返回值3221225477访问多维向量
- 为什么我的向量函数的返回值总是 1
- 返回值std ::不匹配的相等向量
- 自定义类对象的向量的std::find的返回值
- 提升多线程向量的返回值
- 为什么我的选择排序返回原始向量中不在的值
- c++std::使用函数返回值对std::向量进行排序
- placeNumbers应该返回数字的顺序,以便满足布尔值向量中编码的条件
- 返回值优化与大向量的auto_ptr
- 两个归一化向量的 GLSL 点在安卓上返回值 > 1.0
- 将类向量的两个函数返回值与其他类向量元素函数进行比较
- 在c++中在多个函数之间返回和赋值向量的最佳方法
- 通过 unique_ptr 的向量搜索的查找函数的返回值
- 用结构向量作为返回值的c++函数
- Eclipse无法识别向量的返回值