1
0
Fork 0

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
pull/311/merge
Joona Kiiski 2015-03-14 21:20:11 +00:00
parent dc3a5f791e
commit a7381d5e81
1 changed files with 2 additions and 2 deletions

View File

@ -48,8 +48,8 @@ public:
Spinlock() { lock = 1; } // Init here to workaround a bug with MSVC 2013
void acquire() {
while (lock.fetch_sub(1, std::memory_order_acquire) != 1)
for (int cnt = 0; lock.load(std::memory_order_relaxed) <= 0; ++cnt)
if (cnt >= 10000) std::this_thread::yield(); // Be nice to hyperthreading
while (lock.load(std::memory_order_relaxed) <= 0)
std::this_thread::yield(); // Be nice to hyperthreading
}
void release() { lock.store(1, std::memory_order_release); }
};