https://github.com/halide/Halide
Raw File
Tip revision: 46d8e9e0cdae456489f1eddfd6d829956fc3c843 authored by Steven Johnson on 14 February 2018, 23:10:30 UTC
Merge pull request #2750 from halide/srj-llvm
Tip revision: 46d8e9e
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
back to top