假设系统处于多 CPU 的情况下,系统不允许在不同的 CPU 上运行的内核控制路径(一般的说,内核控制路径就是内核对进程的调度路径,这个路径会受到系统调用,中断,系统异常等影响而发生改变。)同时访问某些内核数据结构。在这样的情况下,如果修改这个内核数据结构的时间很短,那么使用使用信号量就会显得效率很低。因为为了检查信号量,内核必须把进程插入到信号量链表中(动作一),然后挂起它(动作二),---这两种操作是比较费时的。在完成这些操作时,其他的内核控制路径可能已经释放了信号量。例如,CPU-1 控制的一个进程要修改一个内核数据结构时(这个数据结构只允许同一时刻只有一个进程修改),发现信号量为0,于是内核要将这进程插入到等待信号量的链表中,然后挂起这个进程。但是,在此间,CPU-2 控制的一个进程可能已经释放了这个信号量。所以,CPU-1 上的这个进程做了无用的等待动作。