pureikyubu/SRC/Common/Spinlock.h
2020-08-06 22:18:38 +03:00

35 lines
450 B
C++

#pragma once
#if defined(_WINDOWS) || defined(_PLAYGROUND_WINDOWS)
class SpinLock
{
volatile long _lock = 0;
public:
void Lock();
void Unlock();
};
#endif
#ifdef _LINUX
class SpinLock
{
std::atomic_flag locked = ATOMIC_FLAG_INIT;
public:
void Lock()
{
while (locked.test_and_set(std::memory_order_acquire)) { ; }
}
void Unlock()
{
locked.clear(std::memory_order_release);
}
};
#endif