From b810d8326f686a892394ab3cdb355c926f4b8fc0 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Wed, 17 Apr 2024 19:58:21 +0100 Subject: [PATCH] Speed up lock acquisition in uncontended case --- src/thread.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/thread.c b/src/thread.c index dfd4f304..71b7b485 100644 --- a/src/thread.c +++ b/src/thread.c @@ -705,12 +705,12 @@ void nvc_lock(nvc_lock_t *lock) LOCK_EVENT(locks, 1); TSAN_PRE_LOCK(lock); - int8_t state = relaxed_load(lock); - if (state & IS_LOCKED) - LOCK_EVENT(contended, 1); - else if (likely(__atomic_cas(lock, &state, state | IS_LOCKED))) + int8_t state = 0; + if (likely(__atomic_cas(lock, &state, state | IS_LOCKED))) goto locked; // Fast path: acquired the lock without contention + LOCK_EVENT(contended, 1); + for (;;) { LOCK_EVENT(retries, 1); -- 2.39.2