9 namespace onnxruntime {
22 SRWLOCK data_ = SRWLOCK_INIT;
39 CONDITION_VARIABLE native_cv_object = CONDITION_VARIABLE_INIT;
48 void notify_one() noexcept { WakeConditionVariable(&native_cv_object); }
49 void notify_all() noexcept { WakeAllConditionVariable(&native_cv_object); }
51 void wait(std::unique_lock<OrtMutex>& lk) {
52 if (SleepConditionVariableSRW(&native_cv_object, lk.mutex()->native_handle(), INFINITE, 0) != TRUE) {
56 template <
class _Predicate>
57 void wait(std::unique_lock<OrtMutex>& __lk, _Predicate __pred);
67 template <
class Rep,
class Period>
68 std::cv_status
wait_for(std::unique_lock<OrtMutex>& cond_mutex,
const std::chrono::duration<Rep, Period>& rel_time);
74 void timed_wait_impl(std::unique_lock<OrtMutex>& __lk,
75 std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>);
78 template <
class _Predicate>
80 while (!__pred())
wait(__lk);
83 template <
class Rep,
class Period>
85 const std::chrono::duration<Rep, Period>& rel_time) {
87 using namespace std::chrono;
88 if (rel_time <= duration<Rep, Period>::zero())
90 using SystemTimePointFloat = time_point<system_clock, duration<long double, std::nano> >;
91 using SystemTimePoint = time_point<system_clock, nanoseconds>;
93 steady_clock::time_point steady_now = steady_clock::now();
94 system_clock::time_point system_now = system_clock::now();
95 if (max_time - rel_time > system_now) {
96 nanoseconds remain = duration_cast<nanoseconds>(rel_time);
97 if (remain < rel_time)
99 timed_wait_impl(cond_mutex, system_now + remain);
108 #include <condition_variable>
109 namespace onnxruntime {
112 nsync::nsync_mu data_ = NSYNC_MU_INIT;
120 void lock() { nsync::nsync_mu_lock(&data_); }
121 bool try_lock() noexcept {
return nsync::nsync_mu_trylock(&data_) == 0; }
122 void unlock() noexcept { nsync::nsync_mu_unlock(&data_); }
129 nsync::nsync_cv native_cv_object = NSYNC_CV_INIT;
138 void notify_one() noexcept { nsync::nsync_cv_signal(&native_cv_object); }
139 void notify_all() noexcept { nsync::nsync_cv_broadcast(&native_cv_object); }
141 void wait(std::unique_lock<OrtMutex>& lk);
142 template <
class _Predicate>
143 void wait(std::unique_lock<OrtMutex>& __lk, _Predicate __pred);
153 template <
class Rep,
class Period>
154 std::cv_status
wait_for(std::unique_lock<OrtMutex>& cond_mutex,
const std::chrono::duration<Rep, Period>& rel_time);
159 void timed_wait_impl(std::unique_lock<OrtMutex>& __lk,
160 std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>);
163 template <
class _Predicate>
165 while (!__pred())
wait(__lk);
168 template <
class Rep,
class Period>
170 const std::chrono::duration<Rep, Period>& rel_time) {
172 using namespace std::chrono;
173 if (rel_time <= duration<Rep, Period>::zero())
175 using SystemTimePointFloat = time_point<system_clock, duration<long double, std::nano> >;
176 using SystemTimePoint = time_point<system_clock, nanoseconds>;
178 steady_clock::time_point steady_now = steady_clock::now();
179 system_clock::time_point system_now = system_clock::now();
180 if (max_time - rel_time > system_now) {
181 nanoseconds remain = duration_cast<nanoseconds>(rel_time);
182 if (remain < rel_time)
184 timed_wait_impl(cond_mutex, system_now + remain);
void notify_all() noexcept
native_handle_type native_handle()
native_handle_type native_handle()
constexpr OrtCondVar() noexcept=default
OrtCondVar & operator=(const OrtCondVar &)=delete
constexpr OrtMutex()=default
nsync::nsync_cv * native_handle_type
nsync::nsync_mu * native_handle_type
GLbitfield GLuint64 timeout
void wait(std::unique_lock< OrtMutex > &lk)
OrtMutex & operator=(const OrtMutex &)=delete
std::cv_status wait_for(std::unique_lock< OrtMutex > &cond_mutex, const std::chrono::duration< Rep, Period > &rel_time)
void notify_one() noexcept
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)