我正在试验SCHED_FIFO
,我看到一些意想不到的行为。 我使用的服务器有12个禁用超线程的内核。 所有可configuration的中断都被设置为在CPU 0上运行。
我的程序开始使用pthreads库创build一个优先级较低的任务的线程,而不更改CPU关联设置为0的调度策略。然后,父线程使用sched_setscheduler()
将它的CPU关联设置为核心3,并将其自己的调度策略设置为SCHED_FIFO
PID零和优先级1,然后开始运行一个非阻塞循环。
程序本身运行良好。 但是,如果我试图在程序运行时第二次login到服务器,则terminal无响应,直到我停止执行程序。 这就像调度器试图在实时进程的同一核心上运行其他进程。
sched_setscheduler()
设置调度策略是否sched_setscheduler()
改变以前创build的子级的行为? 提前致谢。
sched_setscheduler
设置进程的调度程序 ,而不是线程。 看到:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setscheduler.html
如果要为线程设置调度程序,则在创建新线程之前,需要在属性对象上使用pthread_attr_setschedpolicy
和pthread_attr_setschedparam
函数。
我不确定Linux是如何遵守这些要求的,但是您至少应该首先确保您的代码对于规范是正确的,然后根据需要进行调整。