Program Listing for File ticketlock.h

Return to documentation for file (include/embers/primitives/ticketlock.h)

/* Copyright © 2020 Advanced Micro Devices, Inc. All rights reserved */

#ifndef _EMBERS_TICKETLOCK_H_
#define _EMBERS_TICKETLOCK_H_

#include "embers/atomic.h"
#include <cstdint>

namespace embers
{

template <MemoryScope scope = MemoryScope::SYSTEM, size_t BackoffBase = 1>
class TicketLock
{
 private:
  atomic<uint32_t, scope> next_ticket_;
  uint8_t pad[128];
  atomic<uint32_t, scope> now_serving_;


 public:
  TicketLock();
  ~TicketLock() = default;
  TicketLock(const TicketLock &) = delete;
  TicketLock &operator=(const TicketLock &) = delete;
  TicketLock(TicketLock &&) = delete;

  __host__ __device__ void Acquire() noexcept;

  __host__ __device__ void Release() noexcept;
};

}  // namespace embers
#include "ticketlock_impl.h"

#endif  // _EMBERS_TICKETLOCK_H_