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 多平台发布
原子操作包括CAS、加法、减法、与、或、异或和交换等,它们在多线程环境中确保数据的一致性。CAS是乐观锁,常与自旋锁结合,而互斥锁是悲观锁,由操作系统实现,对性能影响更大。
2880

被折叠的 条评论
为什么被折叠?



