优先级反转问题是否可能在用户级线程中发生
2016-04-16 00:55
549 查看
此为《现代操作系统》的一道题目,个人感觉答案看的不是很懂,故写下自己的理解。下面为中 英文版的答案截图:
![](https://img-blog.csdn.net/20160416002024288)
![](https://img-blog.csdn.net/20160416002046101)
首先明确
1.优先级反转发生在:低优先级的线程L位于临界区时,一个高优先级的线程H突然就绪要被调用,此时L被挂起,即被阻塞,无法离开临界区,但因为L仍然拥有临界区的锁,导致H无法访问临界区,所以H将永远等待。
2.用户级线程的特点:内核不知道线程的存在,一个线程处于阻塞时整个进程都会被阻塞
对于用户级线程,分为两种情况:
1.不同进程中的线程。此时相当于进程的优先级反转,有可能发生。
2.同一个进程里的线程。一个线程处于阻塞时整个进程都会被阻塞,所以不可能在低优先级线程运行的时候发生高优先级线程突然就绪【从阻塞到就绪】的情况。也不可能发生高优先级线程剥夺低优先级线程,因为剥夺后低优先级的线程处于阻塞态,会导致整个进程阻塞。
那么是不是说在用户级线程里优先级没有意义呢?
并不是,两个处于就绪态的线程,肯定是优先级高的运行,但是前提是当时的在运行的线程主动放弃CPU
首先明确
1.优先级反转发生在:低优先级的线程L位于临界区时,一个高优先级的线程H突然就绪要被调用,此时L被挂起,即被阻塞,无法离开临界区,但因为L仍然拥有临界区的锁,导致H无法访问临界区,所以H将永远等待。
2.用户级线程的特点:内核不知道线程的存在,一个线程处于阻塞时整个进程都会被阻塞
对于用户级线程,分为两种情况:
1.不同进程中的线程。此时相当于进程的优先级反转,有可能发生。
2.同一个进程里的线程。一个线程处于阻塞时整个进程都会被阻塞,所以不可能在低优先级线程运行的时候发生高优先级线程突然就绪【从阻塞到就绪】的情况。也不可能发生高优先级线程剥夺低优先级线程,因为剥夺后低优先级的线程处于阻塞态,会导致整个进程阻塞。
那么是不是说在用户级线程里优先级没有意义呢?
并不是,两个处于就绪态的线程,肯定是优先级高的运行,但是前提是当时的在运行的线程主动放弃CPU
相关文章推荐
- Linux 自检和 SystemTap
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- 一张图看尽 Linux 内核运行原理
- C#线程间不能调用剪切板的解决方法
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C#实现判断操作系统是否为Win8以上版本
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法
- C#中线程同步对象的方法分析