首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于线程优先级的疑问?解决方案

2012-02-16 
关于线程优先级的疑问?我今天看到下面一段:CPU总是让可执行(excutable)的线程中优先级最高的线程运行。不

关于线程优先级的疑问?
我今天看到下面一段:
CPU总是让"可执行"(excutable)的线程中优先级最高的线程运行。不用担心优先级低的线程永远得不到CPU运行时间(饥饿状态),虽然这是可能的。因为线程一般不会永远处于"可执行"状态,比如等待某个消息,它就会让出CPU,直到这个消息到了才恢复为"可执行"状态。
我的疑问是:1、高优先级的线程中,如果有事件等待,是否此时会让出CPU给低优先级线程?
  2、让出线程后,如何知道有事件发生了,及时中断低优先级的线程,回到该高优先级?是否要等到下一个时间片?我想知道操作系统是如何完成这个过程的。

[解决办法]
内核可以为每个优先级维护一个就绪队列,每次时钟中断调度程序就按照策略调度就绪队列中的线程
如果线程开始等待一个事件,就把它从就绪队列移除,然后放到等待这个事件的线程链表中,今后调度程序就不会执行这个线程
如果这个事件被触发,就将等待这个事件的线程链表中的线程放到对应的就绪队列中,调度程序就可以调度这些线程
[解决办法]
抢占和非抢占的最根本区别在于:在非抢占的调度模式中,一个“进程”一旦占有处理机使用权,其他进程就必须等待他,直到他自行“调度”(自愿放弃处理机),而抢占式的意思是,“调度”操作是以中断形式插入的。

热点排行