web-dev-qa-db-ja.com

C ++にクロスプラットフォームのスレッドライブラリはありますか?

C++で記述された使いやすいクロスプラットフォームのスレッドライブラリを探しています。

boost::threadまたはPthreadsについてどう思いますか? PthreadはPOSIX準拠のシステムでのみ実行されますか?

Qtライブラリのスレッドサポートはどうですか?

26
NumberFour

Boost.Threadは、C++言語の今後の標準スレッドライブラリのドラフトです。それを知って、私はそれがいくつかの強力な保証を提供するのでそれを使うことを好みます(それが標準になるので)。

更新:標準のスレッドライブラリができたので、もう少し精度が上がります。 boost :: shared_mutexなどの一部のboost構造は、標準化されていません(ただし、後で使用される可能性があります)。ただし、標準ライブラリは移動セマンティクスをより適切に活用します。ライブラリを選択する前に知っておくとよいでしょう。また、C++ 11スレッドライブラリを使用するには、それを提供するコンパイラが必要です。今日のすべてのコンパイラに当てはまるわけではありません。

更新:[2012年11月]ほとんどの標準コンパイラはC++ 11スレッドライブラリを提供します。 VS2012、GCC4.8、およびClang3.1は、スレッドと同期プリミティブおよびアトミック操作をサポートしています。完全に実装するには、AnthonyWilliamsによるスレッドだけを使用することもできます。これは、Windows/MacおよびLinuxでサポートされているC++ 11準拠のライブラリです。

さまざまなコンパイラでのC++ 11機能のステータスへのリンク:

33
Klaim

C++ 11に付属しているスレッドライブラリがあります。これは、ブーストスレッドライブラリに基づいて構築されています。残念ながら、Boost.ThreadsとC++ 11に付属しているものとの間には重要な違いがあることを覚えているようです。それでも、C++標準のスレッドライブラリに切り替える予定がある場合は、Boost.Threadsが現在のところ最も近いと思います。

内部的には、これらのライブラリはPOSIXシステムでPthreadを使用し、他の場所で利用可能なネイティブスレッドサポートはすべて使用すると思います。

免責事項:私は2つのどちらとも仕事をしていません。

9
sbi

OpenMP もご覧ください。これは、 ほとんどの主要なコンパイラ でサポートされている(やや標準的な)pragmas仕様のセットです。 OpenMPの利点は、シンプルであり、コードをシングルスレッドバージョンとマルチスレッドバージョンの両方で簡単にコンパイルできることです。

簡単な例:

std::vector<double> a, b;
...
double sum = 0.0;
...
#pragma omp parallel for reduction(+:sum)
  for (i=0; i < n; i++)
    sum = sum + (a[i] * b[i]);

morecomplexthings も可能です。

4
baol

PthreadsはPOSIXシステムでのみ実行されています。 QThreadからのQtは行く方法です。プラットフォームで利用可能です:Linux、Mac OS X、Windows、Embedded Linux、Windows CE、Symbian、Maemo。

4
zoli2k

Intel TBBライブラリ (私の別の回答にリンクされている)について誰も言及していないことに驚いています。また、 タスクベースの実装を優先する必要があります スレッドベースよりも。

3
amit

関係するプラットフォームをリストします。たとえば、Linux/Mac/Windowsのみを使用している場合は、C++ 0x(harhar)がstd :: threadを提供するまで、boost :: threadで問題ない可能性があります。

2
Puppy

複数のプラットフォームで動作するコードにpthreadを使用しました。 Windowsのpthreadの不足を回避するために、次のオープンソースライブラリを使用して大成功を収めました。 POSIX Threads for Windows

2
Starkey

Qtはかなり良いスレッドサポートを持っています。スレッドを作成してその中でコードを実行する必要がある場合は、QThreadだけで十分です。スレッドプールを支援したり、並行実行(QtConcurrentフレームワーク)を抽象化したりするのに役立つ他の多くの高レベルクラスがあります。

2

wxWidgets にはスレッドクラスがあり、wxWidgetsはプラットフォームに依存しないため、uにとって最適な場合があります。

1
the100rabh

Boost.Threadsは、UNIXシステムのPThreadsとWindowsのWin32Threadsの上に構築されています。

Boostライブラリは構文的に単純であり、C++コードをCライブラリと適切にインターフェイスするという厄介なビジネスはすべて舞台裏で行われます。ただし、C++にあまり慣れていない場合は、PThreadsは単純なCAPIを使用する方が簡単に思えるかもしれません。

Qt Threadsも優れたライブラリですが、他のいくつかのBoostライブラリを使用しているため、何があってもコンパイルしてBoostに対してリンクします。私はいつもQtに対してリンクするとは限らないかもしれません。そして、まあ、私は2つの異なるライブラリの使用方法を覚えたくありません。

1
Dr. Watson

SDLはシンプルでクロスプラットフォームであり、スレッド化をサポートしています。

0
SurvivalMachine

PthreadはPosixの一部ですが、すべてのposixシステムにスレッドがあるわけではありません。 pthreadsは最も移植性があります。

どのプラットフォームをサポートしますか?

0
osgx