RFR: 8374878: Add Atomic<T>::compare_set [v2]
Aleksey Shipilev
shade at openjdk.org
Fri Jan 9 17:55:21 UTC 2026
> Following up on [JDK-8367013](https://bugs.openjdk.org/browse/JDK-8367013) improvement, there is an opportunity to rewrite some of our low-level `cas(oldv, newv) == oldv` patterns to more straight-forward compare-and-set helper method. This is useful when you do not actually care about the result that used to be in memory or that is currently in memory, you only care if CAS succeeded or not.
>
> Java atomics already have this duality; arguably due to historical timeline of having compare-and-set before introducing compare-and-exchange.
>
> Found this when converting Epsilon to Atomic<T> ([JDK-8374876](https://bugs.openjdk.org/browse/JDK-8374876)), where this method would simplify the code a bit. I looked around current uses of `compare_exchange` and rewrote them to `compare_set` to show what simplifications are possible.
>
> Additional testing:
> - [x] Linux x86_64 server fastdebug, `all`
Aleksey Shipilev has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:
- Missed another use
- Delegate non-translating version
- Merge branch 'master' into JDK-8374878-atomic-compare-set
- Indenting is a bit off
- Fix
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/29135/files
- new: https://git.openjdk.org/jdk/pull/29135/files/b06ab798..3eeec457
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=29135&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=29135&range=00-01
Stats: 4551 lines in 112 files changed: 2605 ins; 1587 del; 359 mod
Patch: https://git.openjdk.org/jdk/pull/29135.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/29135/head:pull/29135
PR: https://git.openjdk.org/jdk/pull/29135
More information about the hotspot-dev
mailing list