SpinLock implementation in C++

,

Since I read the book Game Engine Architecture I was looking for a way to implement a simple SpinLock in C++. And actually it turns out this is (almost) readily available from boost.

I used the following reference pages:

And in the end, if will fit in a single simple header file:

#ifndef NV_SPINLOCK_H_
#define NV_SPINLOCK_H_

#include <boost/atomic.hpp>
#include <boost/thread.hpp>

namespace nv {

class SpinLock
{
    boost::atomic_flag flag; // it differs from std::atomic_flag a bit -
                             // does not require ATOMIC_FLAG_INIT
public:
    void lock()
    {
        while( flag.test_and_set(boost::memory_order_acquire) )
            ;
    }
    bool try_lock()
    {
        return !flag.test_and_set(boost::memory_order_acquire);
    }
    void unlock()
    {
        flag.clear(boost::memory_order_release);
    }
};

typedef boost::lock_guard<SpinLock> SpinLockGuard;

};

#endif