3

マルチスレッドを使用する C++ 言語でライブラリを作成しています。Windowsで開発しているので、「Windows.h」のメソッドとデータ構造( 、 など)を使用していCreateThreadますHANDLE WINAPI

ここで、このコードを Windows と Linux の両方で実行できるようにしたいと考えています。それを行うためのスレッドの実装をいくつか提案してもらえますか?

このアプリケーションの主な要件は実行速度であるため、高速な実装が必要です。

少し早いですがお礼を。

4

4 に答える 4

11

最善の策は、新しいstd :: threadsライブラリを使用することです。これは移植性があり、標準化されており、最新のスタイルで記述されています。

 std::thread my_thread(my_func, my_param);

http://en.cppreference.com/w/cpp/thread

C ++ 11にアクセスできない場合(VC10および> gcc 4.4で問題ないはずです)、std::threadsは多かれ少なかれ素晴らしいboost::threadsの開発であり、boostライブラリはクロスプラットフォームであり、ポータブル(少なくとも、Win32とLinuxを含む主要なOSをサポートします)。

http://www.boost.org/doc/libs/1_49_0/doc/html/thread.html

最後に、並列化アルゴリズムを探している場合は、インテルのTBBをチェックする価値があるかもしれません。これは、std::アルゴリズムに似た並列構造を提供する最新のC++スレッドライブラリです。

tbb::for_each(my_contaier.begin(), my_container.end(), my_func);

http://threadingbuildingblocks.org/

于 2012-04-20T14:07:31.517 に答える
1

Boost.Thread

http://www.boost.org/libs/thread

于 2012-04-20T14:07:16.147 に答える
1

boost :: threadは、新しい標準C++11のstd::threadのソリューションでもあります。

于 2012-04-20T14:07:24.273 に答える
1

代わりに、移植性が高く (*)、比較的非侵入型のライブラリであり、g++ および (古いバージョンで) MSVC で十分にサポートされているOpenMPです。

標準 C++ ではありませんが、OpenMP 自体は標準です。ループを簡単に並列化できます。

#pragma omp parallel for
for (int i=0; i!=x; ++i) {
}

また、タスクとタイミング機能 (およびその他) もありますが、私の意見では、それは王様の規律であり、並外れたものです。


(*) プラグマのままであれば、移植性はまったくありません。

于 2012-04-20T14:30:27.107 に答える