From 5141e1a4f4ef7499ddd8684469d8038fd75403d2 Mon Sep 17 00:00:00 2001 From: Anton Artemov Date: Mon, 15 Dec 2025 08:39:47 +0000 Subject: [PATCH] 8373497: SpinCriticalSection should use SpinYield Reviewed-by: dholmes, coleenp --- .../share/utilities/spinCriticalSection.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/hotspot/share/utilities/spinCriticalSection.cpp b/src/hotspot/share/utilities/spinCriticalSection.cpp index 0bbbc82c12b..4064c234e97 100644 --- a/src/hotspot/share/utilities/spinCriticalSection.cpp +++ b/src/hotspot/share/utilities/spinCriticalSection.cpp @@ -24,30 +24,19 @@ #include "runtime/atomicAccess.hpp" #include "utilities/spinCriticalSection.hpp" +#include "utilities/spinYield.hpp" void SpinCriticalSection::spin_acquire(volatile int* adr) { if (AtomicAccess::cmpxchg(adr, 0, 1) == 0) { return; // normal fast-path return } + SpinYield sy(4096, 5, millis_to_nanos(1)); + // Slow-path : We've encountered contention -- Spin/Yield/Block strategy. - int ctr = 0; - int Yields = 0; for (;;) { while (*adr != 0) { - ++ctr; - if ((ctr & 0xFFF) == 0 || !os::is_MP()) { - if (Yields > 5) { - os::naked_short_sleep(1); - } - else { - os::naked_yield(); - ++Yields; - } - } - else { - SpinPause(); - } + sy.wait(); } if (AtomicAccess::cmpxchg(adr, 0, 1) == 0) return; }