我的代码如下:
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;
}
这是最有效的方法,还是有更有效的方法来减少运行时间?
最佳答案
我假设您想使用线程完成更复杂的工作。您可以通过多线程获得的加速量取决于您的问题,并不是所有类型的问题都可以并行化。如果你真的想深入探索这个主题,有几本关于这个主题的书。多线程编程不是一件容易的事,您必须注意很多注意事项。一些基本的经验法则:
- 使用的线程数等于您拥有的处理器核心数。多了也没有优势。
- 尽量减少线程之间的共享数据量。最佳情况下,每个线程都应该处理独立的数据,因此没有同步开销。这通常是不可能的,但您应该尽可能少地使用同步。
- 使用同步时,尽量减少锁定互斥锁的时间。
- 为避免死锁,请始终按一定顺序锁定互斥体。例如,如果您在锁定 A 之后锁定互斥量 B,那么永远不会有任何地方可以在 B 之后锁定 A。
还有很多,这些只是我第一时间想到的。
关于c++ - 如何有效地使用 std::threads 来减少运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17874933/