2012-04-20 9 views
3

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

ここでは、このコードをWindowsとLinuxの両方で実行可能にしたいと考えています。あなたは私にそれを行うための実装をいくつか提案することができますか?

このアプリケーションの主な要件は実行速度です。したがって、私は速い実装が必要です。

ありがとうございます。

+6

C++ 11標準ライブラリはマルチスレッドをサポートしています。 – cmannett85

+0

@ cbamber85 - それは本当ですが、それに基づいて毛布のアドバイスには注意が必要です。 C++ 11の実際のコンパイラサポート(重要ではないタスク)は進行中であり可変です。 –

+0

@SteveTownsendそうですね、gccの同時実行サポートはC++ 11言語サポートと似たレベルにあると思いますが、それはどこにもありません。 – cmannett85

答えて

11

新しいstd :: threadsライブラリを使うのが一番の賭けです。これは移植性と標準化され、現代的なスタイルで書かれています。あなたは(問題ないはずVC10と> GCC 4.4)C++ 11へのアクセス権を持っていない場合

std::thread my_thread(my_func, my_param); 

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

は、その後のstd ::スレッドは偉大なの多かれ少なかれ開発効率向上していますブースト::スレッド、ブーストライブラリは、クロスプラットフォームとポータブルです(少なくともそれはWin32 & Linuxを含む主要なOSをサポートします)。

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

あなたはインテルのTBBを確認しながら、それはあなたの価値があるかもしれませんアルゴリズムをparallelisingを探しているなら、最後に、それがSTDに類似の並列構築物を提供する近代的なC++スレッドライブラリです::アルゴリズム

tbb::for_each(my_contaier.begin(), my_container.end(), my_func); 
MSVCがあるに代わる、非常にポータブル(*)と比較的非侵入ライブラリとして

http://threadingbuildingblocks.org/

+0

私は、以前のWindowsのブーストスレッドライブラリで少し問題がありました。スレッドは正常に実行されましたが、アプリケーションを終了するとAVが生成されました。それはおそらく後のリリースではすべて修正されている - 私は1があると思う。たくさんの古い35、:( –

+0

このスレッドによると、 'のstd :: thread'ためVC10の既知の問題があるが。最新のブーストは、その間に、より良い賭けかもしれません。http://stackoverflow.com/questions/9421235/ 1.35が古い –

+0

@MartinJamesをstdthread-クラスに-VC-11-原因-ランダムクラッシュ-いずれかが、回避策と、この質問には重みがありません。 – 111111

1

ブースト::スレッドは、新しい標準C++ 11で、溶液のstd ::スレッドです。

1

は、ウェル(古いバージョンで)g ++および上でサポート。

標準C++ではありませんが、OpenMP自体が標準です。

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

また、タスクやタイミング機能(およびそれ以上)持っていますが、私の意見では、それは規律がためexampled並列の上にある王の:それはあなたが簡単にループをparalllelizeてみましょう。


(*)プラグマを使用している場合、プラグインできません。

関連する問題