与其他控制路径同步的进程或内核控制路径很容易进入死锁 deadlock 状态。
举一个例子:进程p1获得访问数据结构a 的权限,进程p2获得访问b的权限。
但是p1在等待b,p2在等待a。进程之间其他更复杂的循环等待的情况在可能发生。显然,死锁情形会导致受影响的进程或内核控制路径完全处于冻结状态。
只要涉及到内核设计,当所用内核信号量的数量较多时,死锁就成为一个突出的问题,在这种情况下,很难保证内核控制路径在各种方式下的交错执行不出现死锁状态。
有几种操作系统,按照规定的顺序请求信号量来避免死锁。