上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
7.3.2 中断服务程序与线程之间的竞争
在单CPU环境下,另外一种可能产生不一致的原因,是线程跟中断处理程序之间的竞争。比如假设线程A执行完inc eax指令后(这时候,nKernelObject是100,eax的值是101),一个中断发生,系统将把线程A临时挂起,把控制转移到中断处理程序。在中断处理程序中也创建了一个核心对象,同样,nKernelObject被增加了1(这时候,nKernelObject的值是101),当中断处理程序返回后,线程A继续执行mov nKernelObject, eax指令。由于线程A被打断的时候,eax的值是101,所以,nKernelObject被eax覆盖后,仍然是101(正确的情况下,应该是102)。