1003 日 , 2025 20:53:15
CAS (CompareAndSwap)

CompareAndSwap,比较并交换

主要是通过处理器的指令来保证操作的原子性,它主要包含三个变量:

  • 内存地址变量
  • 旧的预期值 A
  • 准备设置的新值 B

如果一个线程需要修改一个共享变量,那先要拿出它的值赋给A,然后再基于A进行业务逻辑执行,得到新值B后,再拿原预期值(原来A的值)和共享变量比较,如果相同就认为其他线程没有修改共享变量,才能将B写入内存

 

CAS的缺点

  • CPU开销大:在高并发量的情况下,如果许多线程反复尝试更新某一个变量,却又一直更新不成功,又因为自旋锁自旋的的时候会一直占用CPU,造成CPU的浪费。
  • ABA 问题:线程 A 去修改 1 这个值,成功。但是中间线程 B 也修改了这个值,但修改后的结果也是 1,所以不影响 A 的操作,这就会有问题。可以用版本号来解决这个问题(也是乐观锁的一种具体实现)。
  • 只能保证一个共享变量的原子性
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!