0733bb9a68
Nothing much to add: add a spinlock which has a tryAcquire method. This will be used as a primitive for building our spinQing locking system.
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
|