最好学习哪种类型的多线程
What type of multithreading would be best to learn?
我想学习c++中的多线程,但我不确定哪种类型最有用。我看过的教程有:
- Windows本地调用
- OpenMP
(我敢肯定可能还有更多)
每种功能的关键特性是什么?它们最适合用于什么?
注意:我已经通过手动创建线程在c#中完成了一些多线程,线程的复杂性只会使它更有趣。:)
如果您有更多的C背景,我会从pthreads开始,如果您习惯于更习惯的c++,我会从Boost Thread开始。
TBB怎么样?它是可移植的,并且具有易于使用的并行模板模式、并发容器、任务调度器和可扩展的内存分配器。TBB将允许您直接管理线程,但在大多数情况下这是不必要的。
就我个人而言,我会远离特定于平台的线程,除非有紧急需要做一些特定于平台的事情。
Boost线程是可移植且易于使用的,但它既没有并行模式,也没有并发容器。您需要手动管理线程,这可能很快就会变得很难看。PThreads在Windows和C上是不可用的。你真的想在c++中做多线程,而不是C。
另一个选择是Visual c++ 2010中的PPL。它类似于TBB,但你可能猜到它只适用于Windows。
OpenMP易于使用,但不是很灵活。既然已经学习了c++,那么应该使用更严肃的语言,比如TBB或PPL。由于一些奇怪的原因,Visual c++ 2010不支持openmp3。太糟糕了。
如果你想要可移植,学习Posix线程。你知道,所有的线程库或多或少都提供了相同的特性集,所以这取决于你,但是Posix将为你提供基础。
openMP并不是你所说的"多线程"。
WinThreads (Windows)和pthreads (Linux)是POSIX线程,可能是您入门的最佳选择。了解进程和线程之间的区别非常重要,然后了解与它们相关的各种内存访问模型。接下来,尝试并发方法,如OpenMP和MPI"线程"。
有一些基本的概念会被重复。好好学习。
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- sigwait() 在多线程程序中不起作用
- 多线程程序中出现意外的内存泄漏
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 多线程比没有线程C++慢
- 具有 C++11 多线程的特征库
- 通过安装信号处理程序关闭多线程应用程序
- C ++多个参数(带结构)char*发送错误(错误类型)?线程
- 最好学习哪种类型的多线程