< prev index next >
src/hotspot/share/gc/z/zMarkTerminate.inline.hpp
Print this page
*** 31,45 ****
_nworkers(0),
_nworking_stage0(0),
_nworking_stage1(0) {}
inline bool ZMarkTerminate::enter_stage(volatile uint* nworking_stage) {
! return Atomic::sub(1u, nworking_stage) == 0;
}
inline void ZMarkTerminate::exit_stage(volatile uint* nworking_stage) {
! Atomic::add(1u, nworking_stage);
}
inline bool ZMarkTerminate::try_exit_stage(volatile uint* nworking_stage) {
uint nworking = Atomic::load(nworking_stage);
--- 31,45 ----
_nworkers(0),
_nworking_stage0(0),
_nworking_stage1(0) {}
inline bool ZMarkTerminate::enter_stage(volatile uint* nworking_stage) {
! return Atomic::sub(nworking_stage, 1u) == 0;
}
inline void ZMarkTerminate::exit_stage(volatile uint* nworking_stage) {
! Atomic::add(nworking_stage, 1u);
}
inline bool ZMarkTerminate::try_exit_stage(volatile uint* nworking_stage) {
uint nworking = Atomic::load(nworking_stage);
*** 47,57 ****
if (nworking == 0) {
return false;
}
const uint new_nworking = nworking + 1;
! const uint prev_nworking = Atomic::cmpxchg(new_nworking, nworking_stage, nworking);
if (prev_nworking == nworking) {
// Success
return true;
}
--- 47,57 ----
if (nworking == 0) {
return false;
}
const uint new_nworking = nworking + 1;
! const uint prev_nworking = Atomic::cmpxchg(nworking_stage, nworking, new_nworking);
if (prev_nworking == nworking) {
// Success
return true;
}
< prev index next >