在用于线程调度的POSIX api中,我们可以使用具有不同调度策略的不同线程。
例:
pthread_attr_setschedpolicy (&attr, SCHED_FIFO); // set policy first in first out
pthread_create(&tid1,&attr,runner,NULL); // create thread with first in first out
pthread_attr_setschedpolicy (&attr, SCHED_RR); // set policy round robin
pthread_create(&tid2,&attr,runner,NULL); // create thread with round robin
在我看来,所有线程都应该遵循一个共同的调度策略(如果我错了请纠正我),那么上面的代码如何工作?
不,线程不需要具有公共调度策略。调度策略控制线程在可运行线程列表中的静态优先级移动方式,因此可以在单个线程级别控制此行为。选择运行调度程序的进程时,将查找具有可运行线程的最高静态优先级,并选择该静态优先级列表的头部线程。
对于SCHED_FIFO
,一旦一个线程达到给定优先级的列表的头部,它将保持在那里直到它阻塞或产生。对于SCHED_RR
,超过其最大时间量的可运行线程将被移动到列表的末尾以获得其静态优先级。