23 #include <glog/logging.h> 104 template <class Condition>
105 void await(Condition condition);
115 static_assert(
sizeof(
int) == 4, "bad platform");
118 static_assert(
sizeof(
std::atomic<uint64_t>) == 8, "bad platform");
130 static constexpr uint64_t
kAddEpoch = uint64_t(1) << kEpochShift;
164 while ((
val_.load(std::memory_order_acquire) >>
kEpochShift) == key.epoch_) {
176 template <
class Condition>
void notifyAll() noexcept
Atom< std::uint32_t > Futex
std::atomic< uint64_t > val_
static constexpr uint64_t kAddEpoch
constexpr auto kIsLittleEndian
—— Concurrent Priority Queue Implementation ——
requires E e noexcept(noexcept(s.error(std::move(e))))
FutexResult futexWait(const Futex *futex, uint32_t expected, uint32_t waitMask)
static constexpr size_t kEpochShift
static constexpr size_t kEpochOffset
void wait(Key key) noexcept
static constexpr uint64_t kAddWaiter
static constexpr uint64_t kWaiterMask
void doNotify(int n) noexcept
folly::std enable_if::typetoAppendDelimStrImpl const Delimiter, const Tv, Tgtresult sizeof(Ts) >
static constexpr uint64_t kSubWaiter
void cancelWait() noexcept
void await(Condition condition)
Key prepareWait() noexcept
int futexWake(const Futex *futex, int count, uint32_t wakeMask)