scoped_spin_lock.h
#ifndef HALIDE_SCOPED_SPIN_LOCK_H
#define HALIDE_SCOPED_SPIN_LOCK_H
namespace Halide { namespace Runtime { namespace Internal {
// An RAII spin lock.
struct ScopedSpinLock {
volatile int *lock;
ScopedSpinLock(volatile int *l) __attribute__((always_inline)) : lock(l) {
while (__sync_lock_test_and_set(lock, 1)) { }
}
~ScopedSpinLock() __attribute__((always_inline)) {
__sync_lock_release(lock);
}
};
}}} // namespace Halide::Runtime::Internal
#endif