1.15、锁的底层原理是什么?

锁的底层原理核心在于利用CPU提供的原子操作,尤其是CAS(Compare And Swap,比较并交换)机制来实现线程间的同步和互斥。

CAS机制的原理

CAS是一种原子指令,涉及三个操作数:

  • • 内存中的当前值V
  • • 期望的旧值X
  • • 要写入的新值B

CAS的操作流程是:当且仅当内存中当前值V等于期望的旧值X时,才将内存值更新为新值B;否则,不做修改。这个过程是不可分割的原子操作,保证了在多线程环境下的安全性。

CAS在锁实现中的应用

以自旋锁(spinlock)为例,锁状态通常用一个原子变量表示(如0表示未锁定,1表示已锁定)。线程尝试通过CAS将该变量从0改为1:

  • • 如果CAS成功,说明线程获得锁,进入临界区。
  • • 如果CAS失败,说明锁已被其他线程持有,当前线程会循环尝试(自旋)直到获得锁。

这种方式避免了传统阻塞锁的上下文切换开销,适合临界区较短的场景。

CAS的优势与限制

  • • 优势:CAS操作是无锁(lock-free)的基础,避免了线程阻塞和死锁风险,提高了并发性能。
  • • 限制:CAS存在ABA问题(值从A变为B又变回A,CAS误判成功),通常需要配合版本号或其他机制解决;此外,CAS操作失败时需要重试,可能导致性能下降。

C++中的实现

C++11标准引入了std::atomic,提供了封装好的原子操作接口,如compare_exchange_weakcompare_exchange_strong,底层即利用CPU的CAS指令实现。开发者通过这些接口可以方便地实现高效的锁或无锁数据结构。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)

阅读剩余
THE END