如何有效地使用std :: threads来减少运行时间

nar*_*ren 1 c++ parallel-processing multithreading c++11

我的代码如下:

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;
}
Run Code Online (Sandbox Code Playgroud)

这是最有效的方式,还是有更有效的方法来减少运行时间?

pet*_*ohn 5

我假设你想用线程做一个更复杂的工作.多线程可以获得的加速量取决于您的问题,而不是所有类型的问题都可以并行化.如果您真的想深入探讨这本主题,​​有几本关于这个主题的书籍.多线程编程并不是一件容易的事情,你必须要注意许多警告.一些基本的经验法则:

  • 使用的线程数等于您拥有的处理器核心数.拥有更多没有优势.
  • 最小化线程之间的共享数据量.最佳地,每个线程应该处理独立的数据,因此没有同步开销.这通常是不可能的,但您应该使用尽可能少的同步.
  • 使用同步时,最小化互斥锁被锁定的时间.
  • 为了避免死锁,总是要有一定数量的互斥锁来锁定.例如,如果在锁定A后锁定互斥锁B,则在B之后永远不会有任何锁定A的位置.

还有很多其他的,这些只是在我脑海中立即出现的.