我想开始学习C++中的多线程。我也在用Java学习它。在Java中,如果我写一个使用多线程的程序,它可以在任何地方运行。然而,在C++中,多线程不依赖于特定于平台的应用程序接口吗?如果是这样的话,这似乎会阻碍可移植性。
如何在C++中执行多线程而不会导致可移植性问题?boost的thread库是一个好的解决方案吗?
顺便提一下--怎么可能将多线程作为一个库来实现呢?这不是编译器必须要做的事情吗?
发布于 2010-06-27 01:59:51
如果您还没有支持C++0x的编译器(例如,visual studio c++ 2010中提供),请使用boost线程。(除非您使用的框架已经支持线程,否则您不会问这个问题)。这些boost线程实际上成为了全新C++的标准。在此之前,C++本身是无线程感知的。
如果您想学习并行编程的其他方面,TBB Threading Building Blocks可能也会让您感兴趣。
关于Qt:如果你只想要线程支持,那就太夸张了。它从编译到结果的往返时间非常慢。这真的是一个很好的设计思想。但不是像boost的C++0x线程那样的官方标准。因此,我不会把它作为第一选择。
发布于 2010-06-27 01:39:52
在C++中,是的,线程是特定于平台的。然而,许多线程库封装了不同平台上的线程的细微差别,提供了用于编写线程应用程序的统一API,因此您不必担心特定于平台的细节。
Boost线程库是一个非常好的解决方案。
我也推荐你去看看ACE。
发布于 2010-06-27 02:57:51
让我们从后面开始:
如何在库中实现线程?
它不是,至少在(纯) C++中不是。这需要语言支持(编译器只是一个实现)。
目前使用了两个东西:
某些部分的
pthread 编译器中针对其他部分的说明(取决于编译器和平台)
两者都很脆弱,并且需要大量的工作才能实现可移植性。基本上,这意味着在代码中使用大量的#ifdef部分来测试编译器和目标体系结构,测试对某些指令的支持等。
这就是为什么人们认为有必要在C++0x中添加线程支持。
我该怎么做多线程?
甚至在你选择一个库之前,你也应该选择一个方法。有两种方法可以编写多线程应用程序(您可以将它们组合在一起):
pthread,但我推荐使用Boost.Thread (以及其他一些)的portability.TBB.的FastFlow或英特尔的Thread Building Blocks
您可以将两者合并,但最好不要这样做。就我个人而言,我发现FastFlow的描述非常棒:它鼓励无锁编程。此外,第二种方法的主要优点是它更适合于多进程编程,并可扩展到分布式环境。
首先,我建议将重点放在其中一个上,并使用它构建一些应用程序。当你觉得舒服的时候,你可能会尝试另一个,但要准备重新开始,它们是如此不同。
https://stackoverflow.com/questions/3124837
复制相似问题