36 lines
424 B
C++
36 lines
424 B
C++
|
|
#ifndef SPIN_LOCK_H
|
||
|
|
#define SPIN_LOCK_H
|
||
|
|
|
||
|
|
#include <atomic>
|
||
|
|
|
||
|
|
namespace smo {
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Simple spinlock using std::atomic
|
||
|
|
*/
|
||
|
|
class SpinLock
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
SpinLock()
|
||
|
|
: locked(false)
|
||
|
|
{}
|
||
|
|
|
||
|
|
bool tryAcquire()
|
||
|
|
{
|
||
|
|
bool expected = false;
|
||
|
|
return locked.compare_exchange_strong(expected, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
void release()
|
||
|
|
{
|
||
|
|
locked.store(false);
|
||
|
|
}
|
||
|
|
|
||
|
|
private:
|
||
|
|
std::atomic<bool> locked;
|
||
|
|
};
|
||
|
|
|
||
|
|
} // namespace smo
|
||
|
|
|
||
|
|
#endif // SPIN_LOCK_H
|