web-dev-qa-db-ja.com

PThreadとboost :: thread?

過去にスレッド化の経験がない場合、C++のどのスレッド化手法が初心者にとって最も簡単ですか? boost :: threadまたはpthreads?

23
Chris

Boost :: threadに移動します。これは 密接に関連している 今後の作業に C++標準スレッド であり、インターフェイスは非常に使いやすく、C++に慣用的です(手動のリソース管理ではなくRAII)。

35
Malte Clasen

私は他のすべての人とは反対の方向に進みます-pthreadを学びます(または少なくとも何が利用できるかを理解します)。

ブーストは主に(posixプラットフォーム上の)pthreadの単なるラッパーであるため、その下で何が起こっているかを知るのに役立ちます。汎用化を試みる場合、boostはプラットフォーム固有の機能をラップしないままにします。これに到達するには、native_handle()呼び出しを使用する必要があります。 native_handle()呼び出しを使用するには、プラットフォームが何を提供するかを知る必要があります。

ソケットのように考えてください。数十のソケットクラスとフレームワークがあります。しかし、最終的には、基盤となるプラットフォームのソケットAPIをラップします。あなたの理解は、それを知ることによって常により豊かになります-そしてあなたのクラスの抽象化がどのように短所を持っているかもしれないかを知ること。

38
Duck

boost :: threadは、非常に優れた移植性のある抽象化です。私は確かにそれを使用しますが、pthreadのようなネイティブスレッドAPIも学習するので、プラットフォームでスレッドがどのように機能するかを知ることができます。

9
Stefan Arentz

Boost.Threadは、ロックにRAIIの概念を使用します。これにより、例外がより安全になり、ミューテックスの解放を忘れるなどのバグを回避できます。

6
Emile Cormier

難易度はほぼ同じだと思います。私が見る唯一の大きな違いは、PThreadsがかなり広くサポートされていることです(クロスプラットフォームの移植に関心がある場合)。もう1つは、PThreadsに関する優れた本がかなりの数あることですが、ほとんどすべての概念は、boost :: threadや他の多くのスレッドライブラリに変換されます。

2
Chris S