#pragma once #include <atomic> #include <unistd.h> #include "utils/cpu_relax.hpp" class SpinLock { public: void lock() { while(lock_flag.test_and_set(std::memory_order_acquire)) cpu_relax(); ///usleep(250); } void unlock() { lock_flag.clear(std::memory_order_release); } private: // guaranteed by standard to be lock free! std::atomic_flag lock_flag = ATOMIC_FLAG_INIT; };