题72
题目
[!question]+
【2023 统考真题】下列由当前线程引起的事件或执行的操作中, 可能导致该线程由执行态变为就绪态的是 ( ) 。
A. 键盘输入
B. 缺页异常
C. 主动出让 CPU
D. 执行信号量的 wait () 操作
分析
[!NOTE]+
在等待键盘输入的操作中, 当前线程处于阻塞态, 键盘输入完成后, 再调出相应的中断服务程序进行处理, 由中断服务程序负责唤醒当前线程, A 错误。
当线程检测到缺页异常时, 会调用缺页异常处理程序从外存调入缺失的页面, 线程状态从执行态转为阻塞态, B 错误。
当线程的时间片用完后, 主动放弃 CPU, 此时若线程还未执行完, 就进入就绪队列等待下次调度, 此时线程状态从执行态转为就绪态,
线程执行wait()后,若成功获取资源,则线程状态不变,若未能获取资源, 则线程进入阻塞态, D 错误。
解
[!done]+
C
【解析】 B. 缺页异常:为线程访问的页面不在内存中时,会触发缺页异常,处理缺页异常时,线程可能需要等待操作系统将所需页面加载到内存中,这会导致线程由执行态变为阻塞态。
C. 主动让出 CPU:线程可以通过主动让出 CPU 的方式,交出自身的执行权限交给其他就绪态的线程。这会导致线程由执行态变为就绪态。
D. 执行信号量的wait操作:在多线程编程中,信号量通常用于线程间的同步和互斥,当一个线程执行信号量的 wait 操作时,如果信号量的计数值不满足条件,线程会进入阻塞状态,从执行态变为阻塞态。
键盘输入(选项 A)通常不会直接导致线程状态变化,它可能触发其他事件或操作,进而影响线程的状态。