本文主要是介绍CAS与原子操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是原子操作?
- 原子操作是一种在执行过程中不会被中断的操作。它要么完全执行成功,要么完全不执行,确保在操作完成之前其他线程不会看到操作的中间状态。
原子操作的实现
-
CAS
- CAS是由 CPU 提供的原子指令。在硬件级别上确保操作的原子性。不涉及上下文切换,性能高
- 主要用途:单个变量更新
-
posix锁机制:mutex互斥锁、spinlock自旋锁
- 互斥锁依赖CAS,且涉及上下文切换,开销大
- 主要用途:保护代码临界区,涉及多条cpu指令和变量的更新
-
std::atomic
类:-
C++ 提供了
std::atomic
类,即原子变量。它封装了底层的原子指令,c++对原子变量的操作确保原子性 -
基于cas实现
-
std::atomic
的内存序 -
std::atomic
还提供了内存序(memory ordering)选项,这决定了原子操作的可见性和顺序约束。例如: -
memory_order_relaxed
:不提供额外的同步或顺序保证。 -
memory_order_acquire
:保证在原子操作之前的操作对当前线程可见。 -
memory_order_release
:保证在原子操作之后的操作对其他线程可见。 -
memory_order_acq_rel
:同时保证 acquire 和 release 语义。 -
memory_order_seq_cst
:提供最严格的顺序保证。
-
推荐学习 https://xxetb.xetslk.com/s/p5Ibb
这篇关于CAS与原子操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!