スケジューリング関係

Pthreadのメモ続き
今日はスケジューリングについて。


スケジューリングポリシーについて

pthread_attr_t attr;

pthread_attr_init(&attr);

/* スケジューリングポリシーを取得する */
pthread_attr_getschedpolicy(&attr, SCHED_RR);

/* ラウンドロビンに設定する */
pthread_attr_setschedpolicy(&attr, SCHED_RR);


設定できるスケジューリングポリシーはSCHED_FIFO、SCHED_RR、SCHED_OTHER。
デフォルトはSCHED_OTHER。


いまmanを見ていて気づいたけれどSCHED_OTHERはリアルタイムではない。
残りはリアルタイムスケジューリング。
ただし、残り2つの動作はPOSIXでは規定していないので注意。
組込みではリアルタイムスケジューリングの方がいいかも。


優先度の変更について
優先度はpthread_attr_setschedparam()で変更できる。

pthread_attr_t attr;
struct sched_param param;

pthread_attr_init(&attr);

/* ラウンドロビンに設定する */
pthread_attr_setschedpolicy(&attr, SCHED_RR);

/* 優先度を設定する */
param.sched_priority = 30;
pthread_attr_setschedparam(&tattr, &param); 
   


pthread_attr_setschedpolicy()を行っているのは、スケジューリングポリシーが
SCHED_OTHERだと意味がないため。
SCHED_FIFO、SCHED_RRのみ設定が有効になる。