アプリケーションレベルのプリエンプティブスケジューリングをきめ細かく制御できる、どのユーザースペーススレッドライブラリ(標準C ++用)が利用できるか知りたいです。ターゲットプラットフォームはPOSIXですが、クロスプラットフォームソリューションがあると特に便利です。
3 に答える
スレッドの優先順位を設定するだけで十分な場合は、pthreadを使用できます。pthreadでスレッドの優先順位を上げる方法は?。手動でスケジュールできるようにする場合は、longjumpやhttp://www.gnu.org/software/pth/pth-manual.htmlなどの協調スレッドを使用する必要があります。複数のプロセッサを使用するには、カーネルスレッドが必要です。カーネルスレッドは、pthreadまたはOpenMPを介して取得できます。
基本的に、最初にいくつかのカーネルスレッドを生成し、それらを固定して、カーネルスレッドの上で追加の協調スレッドを実行する必要があります。タイマーイベントでプリエンプションを実装しない限り、協調スレッドはプリエンプティブではないことに注意してください。ただし、カーネルスレッドはプリエンプションされます。一部の協調スレッドスキームはC++ではうまく機能しません。具体的には、切り替え時にスタック上の変数のデストラクタを呼び出す場合があります。
C ++ 11標準ライブラリは、Linux上のpthreadに依存していると考えられており、スレッドをサポートしています。pthreadを直接使用することもできます(Cで実装されています)。ポータブルなものが必要な場合-Qtは優れたスレッドサポートを備えています。
Portable Runtime Systemは、カスタマイズ可能なユーザー空間プリエンプティブ スケジューリングを備えていますが、C で記述されています。