关于后端:CAS和原子操作互斥锁的关系

44次阅读

共计 582 个字符,预计需要花费 2 分钟才能阅读完成。

CAS 和原子操作的关系

原子操作除了 CAS,还有哪些?

除了 CAS,还有以下常见的原子操作:

  • 加法操作(atomic_add):原子地将一个变量加上一个指定的值。
  • 减法操作(atomic_sub):原子地将一个变量减去一个指定的值。
  • 与操作(atomic_and):原子地对一个变量和一个指定的值进行与操作。
  • 或操作(atomic_or):原子地对一个变量和一个指定的值进行或操作。
  • 异或操作(atomic_xor):原子地对一个变量和一个指定的值进行异或操作。
  • 替换操作(atomic_swap):原子地替换一个变量的值和另一个值
  • (比拟并替换操作(atomic_compare_exchange):原子地比拟一个变量的值和一个冀望的值,如果相等则替换成一个新的值。)

这些原子操作都具备原子性,即在多线程环境下,多个线程能够同时拜访同一个变量,但只有一个线程可能胜利执行原子操作。原子操作能够用于实现同步机制,如互斥锁、自旋锁等,从而保障多线程操作的正确性和一致性。

CAS 和互斥锁的区别?

  • 能够认为 CAS 是乐观锁,实现用到了自旋锁 (因为始终自旋, 耗费 cpu;但自旋不会有内核态和用户态的切换,工夫上会快);由硬件提供反对。无关自旋锁
  • 而互斥锁是乐观锁,对性能影响较大(耗费工夫)。由操作系统来实现

Mutex vs Atomic。CAS 是原子操作的一种,须要自旋

本文由 mdnice 多平台公布

正文完
 0