diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2026-02-02 10:50:30 +0000 |
|---|---|---|
| committer | gingerBill <gingerBill@users.noreply.github.com> | 2026-02-02 10:50:30 +0000 |
| commit | cb50725b866ef7020f9bd82a1c39d4d8f7158e97 (patch) | |
| tree | 50cf1805b9db0172668dedebe8be5cc12baaa4e5 | |
| parent | 20a7a645c22f20eb60d9c6612e4a3d84f864087e (diff) | |
Use `compare_exchange_strong` `mutex_lock` on non-windows sytems
| -rw-r--r-- | src/threading.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/threading.cpp b/src/threading.cpp index 02e6de14b..3b2f304e1 100644 --- a/src/threading.cpp +++ b/src/threading.cpp @@ -367,16 +367,16 @@ gb_internal void semaphore_wait(Semaphore *s) { gb_internal void mutex_lock(BlockingMutex *m) { ANNOTATE_LOCK_PRE(m, 0); - i32 v = m->state().exchange(Internal_Mutex_State_Locked, std::memory_order_acquire); - if (v != Internal_Mutex_State_Unlocked) { + i32 expected = Internal_Mutex_State_Unlocked; + if (m->state().compare_exchange_strong(expected, Internal_Mutex_State_Locked, std::memory_order_acquire)) { mutex_lock_slow(m, v); } ANNOTATE_LOCK_POST(m); } gb_internal bool mutex_try_lock(BlockingMutex *m) { ANNOTATE_LOCK_PRE(m, 1); - i32 v = m->state().exchange(Internal_Mutex_State_Locked, std::memory_order_acquire); - if (v == Internal_Mutex_State_Unlocked) { + i32 expected = Internal_Mutex_State_Unlocked; + if (m->state().compare_exchange_strong(expected, Internal_Mutex_State_Locked, std::memory_order_acquire)) { ANNOTATE_LOCK_POST(m); return true; } |