Skip to content

fix: Issue#2650 - 修复CAS示例代码的并发打印问题和livelock#2801

Merged
Snailclimb merged 1 commit intoSnailclimb:mainfrom
Senrian:main
Mar 26, 2026
Merged

fix: Issue#2650 - 修复CAS示例代码的并发打印问题和livelock#2801
Snailclimb merged 1 commit intoSnailclimb:mainfrom
Senrian:main

Conversation

@Senrian
Copy link

@Senrian Senrian commented Mar 26, 2026

修复 Issue #2650

问题

现有代码使用 Thread.yield()currentValue == targetValue - 1 条件存在 livelock 风险:当线程读取值后被其他线程抢先更新,当前线程的 CAS 会永远失败。

解决方案

  1. 将跳过条件改为 currentValue >= targetValue,避免 livelock
  2. System.out.print 移入 CAS 成功块内,确保打印值与设置值一致
  3. 移除 Thread.yield() 避免不必要的 CPU 让出

参考

@Snailclimb Snailclimb merged commit 2568cf8 into Snailclimb:main Mar 26, 2026
@Snailclimb
Copy link
Owner

修复 Issue #2650

问题

现有代码使用 Thread.yield()currentValue == targetValue - 1 条件存在 livelock 风险:当线程读取值后被其他线程抢先更新,当前线程的 CAS 会永远失败。

解决方案

  1. 将跳过条件改为 currentValue >= targetValue,避免 livelock
  2. System.out.print 移入 CAS 成功块内,确保打印值与设置值一致
  3. 移除 Thread.yield() 避免不必要的 CPU 让出

参考

感谢完善!

@Snailclimb Snailclimb added the perfect content improve the content label Mar 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

perfect content improve the content

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants