1 // Copyright (C) 2018-2020 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include "win_synchapi.h"
7 int pthread_cond_init(pthread_cond_t* __cond, const pthread_condattr_t* __cond_attr)
10 return ERROR_INVALID_HANDLE;
14 InitializeConditionVariable(&__cond->_cv);
18 int pthread_cond_destroy(pthread_cond_t* __cond)
24 int pthread_cond_wait(pthread_cond_t *__cond,
25 pthread_mutex_t *__mutex)
27 if (__cond == NULL || __mutex == NULL)
28 return ERROR_INVALID_HANDLE;
29 return pthread_cond_timedwait(__cond, __mutex, NULL);
32 int pthread_cond_timedwait(pthread_cond_t* __cond,
33 pthread_mutex_t* __mutex,
34 const struct timespec* __abstime)
37 return ERROR_INVALID_HANDLE;
40 long long msec = INFINITE;
41 if (__abstime != NULL) {
42 msec = __abstime->tv_sec * 1000 + __abstime->tv_nsec / 1000000;
45 // SleepConditionVariableCS returns bool=true on success.
46 if (SleepConditionVariableCS(&__cond->_cv, __mutex, (DWORD)msec))
49 const int rc = (int)GetLastError();
50 return rc == ERROR_TIMEOUT ? ETIMEDOUT : rc;
53 int pthread_cond_signal(pthread_cond_t *__cond)
56 return ERROR_INVALID_HANDLE;
59 WakeConditionVariable(&__cond->_cv);
63 int pthread_cond_broadcast(pthread_cond_t *__cond)
66 return ERROR_INVALID_HANDLE;
69 WakeAllConditionVariable(&__cond->_cv);