Skip to content

Commit 56636a2

Browse files
committed
Mutex speed improvements
1 parent 89cd7d9 commit 56636a2

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

JobSystem/Src/JobSystem/AtomicMutex.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,19 @@ namespace JbSystem
2020

2121
inline bool try_lock() noexcept
2222
{
23-
return !_flag.exchange(true, std::memory_order_acquire);
23+
if (!_flag.load(std::memory_order_relaxed)) // Avoid contention when we can locally check for it
24+
{
25+
#if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86) // Is cisc based
26+
return !_flag.exchange(true, std::memory_order_acquire); // lower xchg
27+
#elif defined(__aarch64__) || defined(_M_ARM64) || defined(__arm__) || defined(_M_ARM) || defined(__riscv) // is risc based
28+
bool expected = false;
29+
return _flag.compare_exchange_weak(expected, true, std::memory_order_acquire, std::memory_order_relaxed);
30+
#else
31+
#error "Unsupported architecture"
32+
#endif
33+
}
34+
return false;
35+
2436
}
2537

2638
inline void lock() noexcept

0 commit comments

Comments
 (0)