我的代码如下:
int main()
{
thread t[10];
for (int i = 0;i < 10; i++)
t[i] = thread(print,i);//thread creation
for (int i = 0;i < 10; i++)
t[i].join();//waiting maiin to threads to cpmleate execution
cout << "in main";
}
void print(int i) {
cout<<"i:"<<endl;
}
这是最有效的方式,还是有更有效的方法来减少运行时间?
答案 0 :(得分:5)
我假设你想用线程做一个更复杂的工作。多线程可以获得的加速量取决于您的问题,而不是所有类型的问题都可以并行化。如果您真的想深入探讨这本主题,有几本关于这个主题的书籍。多线程编程并不是一件容易的事情,你必须要注意许多警告。一些基本的经验法则:
还有很多其他的,这些只是我脑海中立刻想到的。
答案 1 :(得分:1)
并行化的效率取决于多种因素(迄今为止非详尽无遗的列表):
查看代码:C ++ 11的thread
类通常用于较低级别的实现,例如:实现线程池。对于您的问题,更高级别的方法(例如async()
或run_once()
)可能更适用。
如果你真的对这个主题感兴趣,你应该获得一本关于这个主题的好书,例如:安东尼威廉姆斯的“行动中的C ++并发”(他也在SO上)