0

可能重复:
C/C++ 中的基本多线程——提示、建议、教程、一些方向?

我想开始使用线程并了解 C/C++ 中的线程。

有没有标准库?还有哪些是最常用的,或者您会向线程初学者推荐哪些?

4

6 回答 6

6

在大多数平台上,您需要操作系统内核支持才能以高性能方式执行线程(例如,可以一次使用多个 CPU 内核)。(我会注意到在用户空间中可以进行协作线程,但现在这是不典型的。makecontext例如参见 Linux)

内核调用:

在 Linux 和 Mac 上,pthreads api 是clone系统调用的瘦包装器。

在 Windows、Windows APICreateThread和朋友上。

标准库(包装内核调用):

在 C11 上,<threads.h>

在 C++11 上,std::thread和朋友们。

第 3 方库(包含上述内容):

apr(阿帕奇运行时)

提升::线程

Qt

好多其它的

于 2012-10-09T14:56:27.230 回答
1

由于 C++11 有std::thread

在此之前,所有解决方案都是特定于平台的。

于 2012-10-09T14:57:46.893 回答
1

我发现 Boost 线程库很好,它适用于 Boost 支持的任何平台,而且数量不少。

Boost.Threads 库

使用 Boost 进行线程化 - 第一部分:创建线程

于 2012-10-09T15:01:52.567 回答
1

根据我自己的经验,我的两分钱:

1) 作为第一步,pthreads(C 的 POSIX)和我使用的链接是 Hunter McMillen computing.llnl.gov/tutorials/pthreads。它简明扼要,值得一读。

2)在那之后,在 C++ 中我去了 boost 接口(寻找)。我建议阅读 C++ Concurrency in Action ( http://www.manning.com/williams/ ) 一书。这样做的好处是本书

  1. 在我看来,有效地向您介绍了线程
  2. 您可以使用易于安装和编译的 boost
  3. 正如作者所说,您也会习惯新标准 C+11(因为正如作者所说,boost 实现与新标准非常相似)。
于 2012-10-09T15:02:49.310 回答
0

C++ 在其最新版本 (C++11) 中具有 std::thread。否则,Qt 经常用于很多东西,或者如果您不需要 Qt 中的所有其他东西或不喜欢许可问题,则使用 boost::thread。

C 没有标准线程。

于 2012-10-09T14:56:45.227 回答
0

我建议使用 OpenMP;这是非常容易使用。

http://en.wikipedia.org/wiki/OpenMP

http://openmp.org/wp/openmp-specifications/

示例:在线程之间分配数组中元素的计算:

float array[i];
#pragma omp parallel for // This is the important bit
for (int i = 0; i < N; ++i)
{
    array[i] = Compute(i); 
}

它是如何工作的:产生了许多线程(您可以设置数量,它应该默认为您拥有的核心数量),并且每个线程执行循环的一部分。

即:如果 N = 100,并且您有 2 个线程,则线程 1 执行 i = 0 到 49 的 for 循环,线程 2 执行 i = 50 到 99 的循环。

你应该小心多线程。例如,如果数组中后面的元素依赖于前面的元素,那么最终的数组将毫无用处,因为可能会先计算这些后面的元素。

您需要向 gcc 提供 -fopenmp,否则 #pragma 将被视为注释并被忽略(即:主线程将执行所有操作)。

于 2012-10-09T15:15:26.587 回答