マルチスレッドのプログラミング

スケジューリング

POSIX はスケジューリングの方針として、先入れ先出し (SCHED_FIFO)、ラウンドロビン (SCHED_RR)、カスタム (SCHED_OTHER) の 3 つを規定しています。SCHED_FIFO は待ち行列ベースのスケジューラで、優先レベルごとに異なる待ち行列をもっています。SCHED_RR は FIFO に似ていますが、各スレッドに実行時間の制限があるという点が異なります。

SCHED_FIFOSCHED_RR は両方とも POSIX のリアルタイム拡張機能です。SCHED_OTHER がデフォルトのスケジューリング方針です。

SCHED_OTHER 方針の詳細については、LWP とスケジューリングクラスを参照してください。

スケジューリングスコープ (スケジューリングの適応範囲) として、プロセススコープ (非結合スレッド用) とシステムスコープ (結合スレッド用) の 2 つが使用できます。スコープの状態が異なるスレッドが同じシステムに同時に存在でき、さらに同じプロセスにも同時に存在できます。通常、スコープは適応範囲を設定します。その範囲内でスレッドの方針が有効となります。

プロセススコープ (非結合スレッド)

PTHREAD_SCOPE_PROCESS スレッドは、非結合スレッドとして生成されます。これらのスレッドと LWP の結合は、スレッドライブラリによって管理されます。

通常は PTHREAD_SCOPE_PROCESS スレッドを使用します。これらのスレッドは、特定の LWP で実行する制約を持たず、THR_BOUND フラグを指定しないで生成された Solaris スレッドと等価です。 各スレッドと LWP の結合は、スレッドライブラリによって決定されます。

システムスコープ (結合スレッド)

PTHREAD_SCOPE_SYSTEM スレッドは、結合スレッドとして生成されます。結合スレッドは、LWP に永久に結合されます。

それぞれの結合スレッドは、初めから終わりまで特定の LWP に結び付けられています。これは Solaris スレッドを THR_BOUND 状態で生成するのと同じことです。スレッドを結合すれば、リアルタイムスケジューリング専用のスケジューリング属性を使用できます。


注 –

結合と非結合のいずれのスレッドの場合でも、他のプロセスからスレッドに直接アクセスしたり、他のプロセスに移動したりできません。