mirror of
https://github.com/Idov31/NovaHypervisor
synced 2026-06-06 15:54:26 +00:00
28 lines
411 B
C++
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;
|
|
} |