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

スレッドのスケジューリング

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

SCHED_FIFOSCHED_RR は両方とも POSIX のリアルタイム拡張機能です。これらの方針で実行されているスレッドは、通常は特殊な特権が必要な Solaris のリアルタイム (RT) スケジューリングクラスに含まれます。SCHED_OTHER がデフォルトのスケジューリングポリシーです。SCHED_OTHER 方針で実行されているスレッドは、従来の Solaris タイムシェアリング (TS) スケジューリングクラスに含まれます。

Solaris は、ほかのスケジューリングクラス、つまり対話型タイムシェアリング (IA) クラス、公平分配 (FSS) クラス、および固定優先順位 (FX) クラスを提供しています。ここでは、これらの特殊なクラスについては説明していません。詳細は、Solaris priocntl(2) のマニュアルページを参照してください。

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

次の 2 つのスケジューリングスコープが使用できます。 プロセススコープ (PTHREAD_SCOPE_PROCESS) とシステムスコープ (PTHREAD_SCOPE_SYSTEM) です。スコープの状態が異なるスレッドが同じシステムに同時に存在でき、さらに同じプロセスにも同時に存在できます。プロセススコープは、同一プロセス内の別スレッドとだけリソースの奪い合いを行うスレッドに影響を及ぼします。システムスコープは、システム内のその他のすべてのスレッドとリソースの奪い合いを行うスレッドに影響を及ぼします。ただし、Solaris 9 リリースから、これらの 2 つのスコープの差異は事実上なくなっています。