#include "core/thread/SpinLock.hpp"

#include <threads.h>

Core::SpinLock::SpinLock() : locked() {
    atomic_init(&locked, false);
}

void Core::SpinLock::lock() {
    while(true) {
        bool expected = false;
        if(atomic_compare_exchange_weak(&locked, &expected, true)) {
            break;
        }
        timespec s{0, 0};
        thrd_sleep(&s, nullptr);
    }
}

void Core::SpinLock::unlock() {
    atomic_store(&locked, false);
}