mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 01:03:09 +00:00
Fully yielding locks, no spinning
7 threads: ELO: 2.00 +-2.7 (95%) LOS: 92.4% Total: 20000 W: 3276 L: 3161 D: 13563 There is no functional change in single thread mode Resolves #304
This commit is contained in:
parent
dc3a5f791e
commit
a7381d5e81
1 changed files with 2 additions and 2 deletions
|
@ -48,8 +48,8 @@ public:
|
||||||
Spinlock() { lock = 1; } // Init here to workaround a bug with MSVC 2013
|
Spinlock() { lock = 1; } // Init here to workaround a bug with MSVC 2013
|
||||||
void acquire() {
|
void acquire() {
|
||||||
while (lock.fetch_sub(1, std::memory_order_acquire) != 1)
|
while (lock.fetch_sub(1, std::memory_order_acquire) != 1)
|
||||||
for (int cnt = 0; lock.load(std::memory_order_relaxed) <= 0; ++cnt)
|
while (lock.load(std::memory_order_relaxed) <= 0)
|
||||||
if (cnt >= 10000) std::this_thread::yield(); // Be nice to hyperthreading
|
std::this_thread::yield(); // Be nice to hyperthreading
|
||||||
}
|
}
|
||||||
void release() { lock.store(1, std::memory_order_release); }
|
void release() { lock.store(1, std::memory_order_release); }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue