Pthreadsを使用してください。これははるかに広く使用されているため、はるかに多くの情報とサポートを利用できます。GNUPthを実際に使用している人に会ったことはありません。または、C ++ 11を使用std::thread
している場合は使用し、使用していない場合はを使用しますboost::thread
。
では、POSIXPthreadとGNUPthの違いを誰かに説明してもらえますか?
Pthreadsは、プリエンプティブマルチスレッドのクロスプラットフォーム標準です。つまり、(通常)OSカーネルがスレッドを管理し、OSスケジューラが各スレッドをいつ実行するかを決定します(単一のコアがある場合、一度に実行できるスレッドは1つだけです。複数のコアがある場合は、一度に複数のスレッドを実行できます)。OSスケジューラは、(ほぼ)いつでも任意のスレッドを一時停止し、別のスレッドを実行させることができるため、各スレッドは制限された「タイムスライス」を取得し、その後、他のスレッドが実行されます。
GNU Pthは、プリエンプティブではないユーザースペーススレッドライブラリです。つまり、スレッドと、その時点で実行されるスレッドは、カーネルではなくユーザースペースで決定されます。プリエンプティブでないスレッドライブラリを使用するプログラムは、別のスレッドを実行するためにスレッドが任意の時間に一時停止されないため、理解しやすいと言う人もいます。
サーバーをすべての*nixベースのシステム間で移植可能かつ効率的にし、重いfork()を使用しないようにしたい。
fork
UNIXでは重くありません。
W * ndowsはどうですか?PthreadsまたはPthはオプションですか?そうでない場合、そのオペレーティングシステムのAPIは何ですか?
Windows用のpthreadAPIがありますが、それらはWindowsOSにネイティブではありません。GNU PthがWindowsで動作するかどうかはわかりません。Cygwinを使用しない限り、疑わしいです。Windowsには独自のWin32スレッドモデルがあります。
std::thread
またはを使用するかboost::thread
、POSIXプラットフォームおよびWindowsに移植可能であり、APIの特定の部分を使いやすくします(具体的には、ミューテックスのロックとロック解除は例外安全な方法で簡単に実行でき、条件変数は使いやすくなります)。