- 论坛徽章:
- 15
|
justin_wang0710 发表于 2015-01-09 16:34
假設我有兩個thread
thread A為高優先權 固定執行一段時間後 Sleep
thread B有設置信號驅動,若driver有 ...
答案是否定的。
首先,信号是用户态使用的通信或同步方式,内核态不使用。
其次,信号只有在当前进程正在运行,且“从内核态返回用户态”时,才能得到处理,也就是说当threadA正在运行时,此时threadB收到了信号,但不会立即得到处理,只是设置了该thread信号的pending标记、并将该thread进程设置成Running状态而已。信号需要等到诸如如下时机时才能得到处理:
comming a 中断,theadA在用户态被中断打断,当中断处理完成,返回用户态之前,有调度时机,如果threadB的优先级更高、或者threadA时间片到、或者其它原因导致threadB得到调度,threadB得到调度后,需要等待再次从“内核态返回用户态”(如系统调用或中断返回),并且不被调度出去时,才能处理pending的信号。
也就是说,信号处理依赖于:1、threadB被调度;2、threadB从内核态返回用户态(如系统调用或中断返回)
总的来说,信号处理的优先级比较低,比较难保证及时。 |
|