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

标签 c++ multithreading c++11 parallel-processing

我的代码如下:

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/

相关文章:

c++ - 将多行分隔符与 C++ 2011 正则表达式 (ECMAScript) 匹配的问题

c++ - 如何构建一个通用方法以将不同 Q_PROPERTY 类型的 notifySignal 连接到属性 char * name 中的 void slot(QVariant)?

c++ - 在 QThread 中的 QCoreApplication 上调用 quit() 时出错

c++ - 接受无限相同数量的 3 种类型的函数

c++ - 在不使用 boost::any 的情况下将参数存储在可变参数模板函数中

c++ - 如何在递归模板函数中首次调用时执行函数?

c++ - while循环退出后,字符串内容被删除?

c++ - windows mp3 解码库 c c++

arrays - 在foreach循环中使用Parallel::ForkManager

java - 在单独的 JavaFX 线程中排队打印作业