除了 Yoav Aviram 和 gbjbaanb 所说的,另一个关键点曾经是你永远不会在单 CPU 机器上使用自旋锁,而信号量在这样的机器上是有意义的。现在,您经常很难找到没有多个内核、超线程或等价的机器,但是在只有一个 CPU 的情况下,应该使用信号量。(我相信原因是显而易见的。如果单个 CPU 正忙于等待其他东西释放旋转锁,但它运行在唯一的 CPU 上,锁不太可能被释放,直到当前进程或线程被 O/S 抢占,这可能需要一段时间,没有任何有用的事情发生,直到抢占发生
另一方面,考虑到高度拥塞,或者如果锁被持有很长时间(有时你只是不能帮助它!)一个自旋锁会消耗大量的 CPU 周期,却什么也做不了。
在这种情况下,信号量(或互斥量)是一个更好的选择,因为它允许不同的线程在此期间运行 很有用任务。或者,如果没有其他线程有什么有用的事情要做,它允许操作系统节流 CPU 和减少热量/节约能源。