实现可重入内核需要利用同步机制:如果内核控制路径对某个内核数据结构进行操作时被挂起,那么,其他的内核控制路径就不应该再对该数据结构进行操作,除非它已被重新设置成一致性(consistent)状态。否则,两个控制路径的交互作用将破坏所存储的信息。
例如,假设全局变量V包含某个系统资源的可用项数。第一个内核控制路径A读这个变量,并且确定仅有一个可用资源项。这时,另一个内核控制路径B被激活,并读同意变量V,V值仍为1。因此,B对V减1,并开始用这个资源项,然后,A恢复执行,因为A已经读取到V的值,于是它假定自己可以对V减1并获取B已经在使用的这个资源项,结果,V的值变为-1,两个内核控制路径使用相同的资源项有可能导致灾难性的后果。
在某个计算结果取决于如何调度两个或多个进程时,相关代码就是不正确的。我们说存在一种竞争条件(race condition)。一般来说,对全局变量的安全访问通过原子操作(atomic operation)来保证。在前面的例子中,如果两个控制路径读V并减1是一个单独的,不可中断的操作,那么,就不可能出现数据讹误,然而,内核包含的很多数据结构是无法用单一操作访问的。例如, 用单一的操作从链表中删除一个元素是不可能的,因为内核一次至少访问两个指针。临界区(cirtical region)是这样的一段代码,进入这段代码的进程必须完成,之后另一个进程才能进入()
这些问题不仅出现在内核控制路径之间,也出现在共享公共数据的进程之间,几种同步技术已经被采用。