Program Listing for File spinlock.h
↰ Return to documentation for file (include/embers/primitives/spinlock.h
)
/* Copyright © 2020 Advanced Micro Devices, Inc. All rights reserved */
#ifndef _EMBERS_SPINLOCK_H_
#define _EMBERS_SPINLOCK_H_
#include <cstdint>
#include <type_traits>
#include "embers/atomic.h"
namespace embers
{
template <MemoryScope scope = MemoryScope::SYSTEM, typename Integer = uint64_t,
typename enable = std::enable_if_t<std::is_integral<Integer>::value> >
class SpinLock
{
private:
atomic<Integer, scope> lock_;
public:
SpinLock();
~SpinLock() = default;
SpinLock(const SpinLock &) = delete;
SpinLock &operator=(const SpinLock &) = delete;
SpinLock(SpinLock &&) = delete;
__host__ __device__ void Acquire();
__host__ __device__ void Release();
// Tries to acquire the lock, returns if not availble
__host__ __device__ bool TryAcquire();
};
} // namespace embers
#include "spinlock_impl.h"
#endif // _EMBERS_SPINLOCK_H_