diff --git a/src/misc/spin_lock.h b/src/misc/spin_lock.h index b223abf..c2b390f 100644 --- a/src/misc/spin_lock.h +++ b/src/misc/spin_lock.h @@ -9,7 +9,12 @@ class spin_lock { inline void lock() { uint8_t round = 0; while (locked.test_and_set(std::memory_order_acquire)) { - while(locked._M_i) { /* waiting 'till its zero so we can try an exchanged again; Atomic exchanges have a huge bug overhead to deal with! */ + /* waiting 'till its zero so we can try an exchanged again; Atomic exchanges have a huge bug overhead to deal with! */ +#ifdef WIN32 + while(locked._My_flag > 0) { +#else + while(locked._M_i) { +#endif //Yield when we're using this lock for a longer time, which we usually not doing if(round++ % 8 == 0) std::this_thread::yield();