Files
idov31 f3b92fe1f3 Init
2025-07-11 15:40:12 +03:00

28 lines
411 B
C++

#include "pch.h"
#include "Spinlock.h"
Spinlock::Spinlock() {
Unlock();
}
Spinlock::~Spinlock() {
Unlock();
}
bool Spinlock::DoLock() {
return !InterlockedExchange16(&lock, 1) && lock != 0;
}
void Spinlock::Lock() {
UINT32 wait = 1;
while (!DoLock()) {
for (UINT32 i = 0; i < wait; i++)
_mm_pause();
wait = wait * 2 > MAX_WAIT ? MAX_WAIT : wait * 2;
}
}
void Spinlock::Unlock() {
lock = 0;
}