上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
7.3.3 多个CPU之间的竞争
在多CPU的SMP(对称多处理)环境下情形还要复杂,因为不仅仅是多个线程之间的竞争,还存在多个CPU之间的竞争。仍然以上述假设为例,nKernelObject记录了系统中核心对象的数量,A和B是系统中的两个线程,分别创建了一个系统核心对象。这时候,线程A需要对nKernelObject进行加一操作,在单处理系统中,只有在线程A时间片用完的情况下,才会出现上述不一致的情况,因为如果线程A的运行时间片没有用完,那么线程A不会被挂起,上述不一致就不会产生了(不考虑线程A被中断打断的情况),但在多处理器系统中,即使线程A时间片没有用完,仍然在运行,也可能产生不一致的现象,因为线程B可能与线程A同时在运行(两个线程分别在两个不同的CPU上运行),这个时候,如果出现表7-1所示运行序列就会产生不一致现象。
表7-1 一个产生访问冲突的指令序列
可以看出,在多CPU的环境下,即使线程不被打断,也可能产生不一致状态,且因为线程被打断而产生的不一致状态也仍然存在。