スケジューリング関係
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, ¶m);
pthread_attr_setschedpolicy()を行っているのは、スケジューリングポリシーが
SCHED_OTHERだと意味がないため。
SCHED_FIFO、SCHED_RRのみ設定が有効になる。