5#include "../include/lock.h"
19 InitializeCriticalSection(lock);
28 EnterCriticalSection(lock);
37 LeaveCriticalSection(lock);
46 DeleteCriticalSection(lock);
55 if (TryEnterCriticalSection(lock)) {
62 if (lock == NULL || condition == NULL) {
66 DWORD timeout = (timeout_ms < 0) ? INFINITE : (DWORD)timeout_ms;
67 if (SleepConditionVariableCS(condition, lock, timeout)) {
74 if (condition == NULL) {
78 InitializeConditionVariable(condition);
83 if (condition == NULL) {
87 WakeConditionVariable(condition);
92 if (condition == NULL) {
96 WakeAllConditionVariable(condition);
101 if (condition == NULL || lock == NULL) {
105 if (SleepConditionVariableCS(condition, lock, INFINITE)) {
112 if (condition == NULL || lock == NULL) {
116 DWORD timeout = (timeout_ms < 0) ? INFINITE : (DWORD)timeout_ms;
117 if (SleepConditionVariableCS(condition, lock, timeout)) {
137 int ret = pthread_mutex_init(lock, NULL);
139 fprintf(stderr,
"pthread_mutex_init failed: %s\n", strerror(ret));
150 int ret = pthread_mutex_lock(lock);
154 fprintf(stderr,
"Deadlock detected in pthread_mutex_lock\n");
157 fprintf(stderr,
"Invalid mutex in pthread_mutex_lock\n");
160 fprintf(stderr,
"pthread_mutex_lock failed: %s\n", strerror(ret));
173 int ret = pthread_mutex_unlock(lock);
175 fprintf(stderr,
"pthread_mutex_unlock failed: %s\n", strerror(ret));
187 int ret = pthread_mutex_destroy(lock);
189 fprintf(stderr,
"pthread_mutex_destroy failed: %s\n", strerror(ret));
201 int ret = pthread_mutex_trylock(lock);
208 fprintf(stderr,
"Invalid mutex in pthread_mutex_trylock\n");
211 fprintf(stderr,
"pthread_mutex_trylock failed: %s\n", strerror(ret));
221 if (condition == NULL) {
225 int ret = pthread_cond_init(condition, NULL);
227 fprintf(stderr,
"pthread_cond_init failed: %s\n", strerror(ret));
235 if (condition == NULL) {
239 int ret = pthread_cond_signal(condition);
241 fprintf(stderr,
"pthread_cond_signal failed: %s\n", strerror(ret));
249 if (condition == NULL) {
253 int ret = pthread_cond_broadcast(condition);
255 fprintf(stderr,
"pthread_cond_broadcast failed: %s\n", strerror(ret));
263 if (condition == NULL || lock == NULL) {
267 int ret = pthread_cond_wait(condition, lock);
269 fprintf(stderr,
"pthread_cond_wait failed: %s\n", strerror(ret));
276 if (condition == NULL || lock == NULL) {
280 if (timeout_ms < 0) {
286 if (clock_gettime(CLOCK_REALTIME, &ts) != 0) {
287 fprintf(stderr,
"clock_gettime failed: %s\n", strerror(errno));
292 ts.tv_sec += timeout_ms / 1000;
293 ts.tv_nsec += (timeout_ms % 1000) * 1000000L;
296 if (ts.tv_nsec >= 1000000000L) {
298 ts.tv_nsec -= 1000000000L;
301 int ret = pthread_cond_timedwait(condition, lock, &ts);
308 fprintf(stderr,
"Invalid parameters in pthread_cond_timedwait\n");
311 fprintf(stderr,
"pthread_cond_timedwait failed: %s\n", strerror(ret));
317 if (condition == NULL) {
321 int ret = pthread_cond_destroy(condition);
323 fprintf(stderr,
"pthread_cond_destroy failed: %s\n", strerror(ret));
int lock_init(Lock *lock)
int cond_wait(Condition *condition, Lock *lock)
int cond_free(Condition *condition)
int cond_init(Condition *condition)
int lock_acquire(Lock *lock)
int cond_wait_timeout(Condition *condition, Lock *lock, int timeout_ms)
int lock_release(Lock *lock)
int cond_signal(Condition *condition)
int lock_try_acquire(Lock *lock)
int cond_broadcast(Condition *condition)
int lock_free(Lock *lock)
int lock_wait(Lock *lock, Condition *condition, int timeout_ms)