首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的多线程...从哪里开始?

C++中的多线程...从哪里开始?
EN

Stack Overflow用户
提问于 2010-06-27 01:35:20
回答 10查看 9.1K关注 0票数 14

我想开始学习C++中的多线程。我也在用Java学习它。在Java中,如果我写一个使用多线程的程序,它可以在任何地方运行。然而,在C++中,多线程不依赖于特定于平台的应用程序接口吗?如果是这样的话,这似乎会阻碍可移植性。

如何在C++中执行多线程而不会导致可移植性问题?boost的thread库是一个好的解决方案吗?

顺便提一下--怎么可能将多线程作为一个库来实现呢?这不是编译器必须要做的事情吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-06-27 01:59:51

如果您还没有支持C++0x的编译器(例如,visual studio c++ 2010中提供),请使用boost线程。(除非您使用的框架已经支持线程,否则您不会问这个问题)。这些boost线程实际上成为了全新C++的标准。在此之前,C++本身是无线程感知的。

如果您想学习并行编程的其他方面,TBB Threading Building Blocks可能也会让您感兴趣。

关于Qt:如果你只想要线程支持,那就太夸张了。它从编译到结果的往返时间非常慢。这真的是一个很好的设计思想。但不是像boost的C++0x线程那样的官方标准。因此,我不会把它作为第一选择。

票数 15
EN

Stack Overflow用户

发布于 2010-06-27 01:39:52

在C++中,是的,线程是特定于平台的。然而,许多线程库封装了不同平台上的线程的细微差别,提供了用于编写线程应用程序的统一API,因此您不必担心特定于平台的细节。

Boost线程库是一个非常好的解决方案。

我也推荐你去看看ACE

票数 4
EN

Stack Overflow用户

发布于 2010-06-27 02:57:51

让我们从后面开始:

如何在库中实现线程?

它不是,至少在(纯) C++中不是。这需要语言支持(编译器只是一个实现)。

目前使用了两个东西:

某些部分的

  • 汇编代码(如pthread

编译器中针对其他部分的说明(取决于编译器和平台)

两者都很脆弱,并且需要大量的工作才能实现可移植性。基本上,这意味着在代码中使用大量的#ifdef部分来测试编译器和目标体系结构,测试对某些指令的支持等。

这就是为什么人们认为有必要在C++0x中添加线程支持。

我该怎么做多线程?

甚至在你选择一个库之前,你也应该选择一个方法。有两种方法可以编写多线程应用程序(您可以将它们组合在一起):

  • 通过共享进行通信:这意味着使用互斥锁、原子操作等。您可以在Linux平台上使用pthread,但我推荐使用Boost.Thread (以及其他一些)的portability.
  • Share :这源于函数式语言,而且是最新的,适用于分布式计算。这意味着将消息从一个线程传递到另一个线程,并且不共享任何资源。你可以使用TBB.

FastFlow或英特尔的Thread Building Blocks

您可以将两者合并,但最好不要这样做。就我个人而言,我发现FastFlow的描述非常棒:它鼓励无锁编程。此外,第二种方法的主要优点是它更适合于多进程编程,并可扩展到分布式环境。

首先,我建议将重点放在其中一个上,并使用它构建一些应用程序。当你觉得舒服的时候,你可能会尝试另一个,但要准备重新开始,它们是如此不同。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3124837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档