我已经开始在c ++ 0x中使用一些基本的线程来加快速度。对于一个除了测试速度之外什么都不做的简单例子:
void my_thread_func(int n, int steps, int offset)
{
double a[n];
for (int i=0; i<n; i++)
a[i] = i + offset;
for (int step=0; step<steps; step++)
for (int i=0; i<n; i++)
a[i] = sin(a[i]);
}
int main()
{
std::vector<std::thread> t;
for (int i=0; i<numRuns; i++)
t.push_back(std::thread(my_thread_func, n, steps, i));
for (int i=0; i<numRuns; i++)
t[i].join();
}
这很有效。我的问题有点笼统,即如何将上述想法概括为与成员函数一起使用。假设我有10个Rope(s),每根绳子有几个(单线程)成员函数,computeTorques(),computeForces()等。假设Rope(s)不共享内存/资源,有没有办法我可以多线程调用每个Rope的每个成员函数而无需显式更改Rope中的(单线程)代码吗?
答案 0 :(得分:3)
使用std::bind
。
class Rope
{
...
void compute();
};
int main()
{
Rope ropes[10];
std::vector<std::thread> t;
for(auto& r : ropes)
t.push_back(std::thread(std::bind(&Rope::compute, &r)));
for(auto& th : t)
th.join();
}
编辑:使用lambda会更好。
for(auto& r : ropes)
t.push_back(std::thread([&]{ r.compute(); }));
答案 1 :(得分:0)
它完全取决于对象的实现。
对于某些物体,这是安全的,对于其他可能有麻烦的物体。