原子变量

锁的缺陷

  1. 在挂起和恢复线程等过程中存在着很大的开销,并且通常存在着较长时间的中断。

  2. 如果一个线程在持有锁的情况下被延迟执行(例如发生了缺页错误、调度延迟,或者其他类似情况),那么所有需要这个锁的线程都无法执行下去。

  3. 如果被阻塞线程的优先级较高,而持有锁的线程优先级较低,那么将发生优先级反转(Priority Inversion)。即使高优先级的线程可以抢先执行,但仍然需要等待锁被释放,从而导致它的优先级会降至低优先级线程的级别。

  4. 如果持有锁的线程被永久地阻塞(例如由于出现了无限循环,死锁,活锁或者其他的活跃性故障),所有等待这个锁的线程就永远无法执行下去。

最后更新于