上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
7.5.2 Hello China的未来实现
需要说明的是,Hello China当前版本的实现是针对单CPU环境的,没有实现支持多CPU的版本。但为实现支持多CPU的版本预留了扩展接口。目前情况下,所有内核对象都是从__COMMON_OBJECT继承的,这样就可以直接在__COMMON_OBJECT的定义中增加一个保护标志,用于保护多CPU环境下对内核对象的同步修改,这个保护标志可以被所有的继承自__COMMON_OBJECT的内核对象继承。在__ENTER_CRITICAL_SECTION宏定义中,预留了一个参数objptr(请参考本章前面相关内容),该参数就是一个指向__COMMON_OBJECT的指针。比如在多CPU环境下,为了完成对一个__KERNEL_THREAD_OBJECT对象KernelThread的属性的修改,可以这样进行:
DWORD dwFlags; __ENTER_CRITICAL_SECTION((__COMMON_OBJECT*)&KernelThread,dwFlags); Critical code here. __LEAVE_CRITICAL_SECTION((__COMMON_OBJECT*)&KernelThread,dwFlags);
这样就实现了多CPU环境下的数据保护(线程同步)。在__ENTER_CRITICAL_SECTION的定义中,就是采用BTS指令,实现了等待/加锁过程。