Skip to content

Commit

Permalink
Fully yielding locks, no spinning
Browse files Browse the repository at this point in the history
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 official-stockfish#304
  • Loading branch information
zamar committed Mar 24, 2015
1 parent dc3a5f7 commit a7381d5
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ class Spinlock {
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); }
};
Expand Down

0 comments on commit a7381d5

Please sign in to comment.