Mutex 是互斥锁,指的是没有拿到锁的线程会被放入 OS 的调度队列中(但是之后还是可以被调度的)。这种锁的实现需要 OS 的配合。而 Spinlock 自选锁就是忙等。

Mutex 的优势在于不需要忙等,这样可以节省忙等时所占据的资源给其他的线程,但是它的缺点在于挂起和恢复需要一定的开销,对于时间较短的资源占用,反而不如 Spinlock 表现出色。

Mutex 的“挂起”机制和 Semaphore 或者 Condition Variable 的“挂起/唤醒”机制不同,Mutex 并没有等待队列的概念,它只是被重新放入到了 OS 的调度队列。