28 template <
typename TargetClock,
typename Clock,
typename Duration>
30 std::chrono::time_point<Clock, Duration>
const&
time) {
31 using std::chrono::duration_cast;
32 using TimePoint = std::chrono::time_point<Clock, Duration>;
33 using TargetDuration =
typename TargetClock::duration;
34 using TargetTimePoint =
typename TargetClock::time_point;
39 auto const delta = time.time_since_epoch();
40 return TargetTimePoint(duration_cast<TargetDuration>(delta));
63 std::chrono::system_clock::time_point
const* absSystemTime,
64 std::chrono::steady_clock::time_point
const* absSteadyTime,
74 std::chrono::system_clock::time_point
const* absSystemTime,
75 std::chrono::steady_clock::time_point
const* absSteadyTime,
78 template <
typename Futex,
typename Deadline>
83 Deadline
const& deadline,
85 return futexWaitImpl(futex, expected,
nullptr, &deadline, waitMask);
88 template <
typename Futex,
typename Deadline>
93 Deadline
const& deadline,
95 return futexWaitImpl(futex, expected, &deadline,
nullptr, waitMask);
98 template <
typename Futex>
101 auto rv =
futexWaitImpl(futex, expected,
nullptr,
nullptr, waitMask);
106 template <
typename Futex>
111 template <
typename Futex,
class Clock,
class Duration>
115 std::chrono::time_point<Clock, Duration>
const& deadline,
117 using Target =
typename std::conditional<
119 std::chrono::steady_clock,
120 std::chrono::system_clock>
::type;
121 auto const converted = time_point_conv<Target>(deadline);
FutexResult futexWaitImpl(const Futex< std::atomic > *futex, uint32_t expected, std::chrono::system_clock::time_point const *absSystemTime, std::chrono::steady_clock::time_point const *absSteadyTime, uint32_t waitMask)
std::chrono::steady_clock::time_point now()
Atom< std::uint32_t > Futex
int futexWakeImpl(const Futex< std::atomic > *futex, int count, uint32_t wakeMask)
—— Concurrent Priority Queue Implementation ——
FutexResult futexWait(const Futex *futex, uint32_t expected, uint32_t waitMask)
static const char *const value
FutexResult futexWaitUntil(const Futex *futex, uint32_t expected, std::chrono::time_point< Clock, Duration > const &deadline, uint32_t waitMask)
TargetClock::time_point time_point_conv(std::chrono::time_point< Clock, Duration > const &time)
std::chrono::nanoseconds time()
int futexWake(const Futex *futex, int count, uint32_t wakeMask)