From ad6295d706af202462c8f759d7703c04e7b2369c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Tue, 20 Nov 2018 14:03:38 +0100 Subject: [PATCH] Add ChiakiCond --- lib/include/chiaki/thread.h | 13 ++++++++++ lib/src/thread.c | 47 ++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/lib/include/chiaki/thread.h b/lib/include/chiaki/thread.h index dfd082f..d2a104e 100644 --- a/lib/include/chiaki/thread.h +++ b/lib/include/chiaki/thread.h @@ -48,6 +48,19 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_lock(ChiakiMutex *mutex); CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_trylock(ChiakiMutex *mutex); CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_unlock(ChiakiMutex *mutex); + +typedef struct chiaki_cond_t +{ + pthread_cond_t cond; +} ChiakiCond; + +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_init(ChiakiCond *cond); +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_fini(ChiakiCond *cond); +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_wait(ChiakiCond *cond, ChiakiMutex *mutex); +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_signal(ChiakiCond *cond); +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_broadcast(ChiakiCond *cond); + + #ifdef __cplusplus } #endif diff --git a/lib/src/thread.c b/lib/src/thread.c index 500f8a3..c066738 100644 --- a/lib/src/thread.c +++ b/lib/src/thread.c @@ -79,4 +79,49 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_unlock(ChiakiMutex *mutex) if(r != 0) return CHIAKI_ERR_UNKNOWN; return CHIAKI_ERR_SUCCESS; -} \ No newline at end of file +} + + + + +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_init(ChiakiCond *cond) +{ + int r = pthread_cond_init(&cond->cond, NULL); + if(r != 0) + return CHIAKI_ERR_UNKNOWN; + return CHIAKI_ERR_SUCCESS; +} + +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_fini(ChiakiCond *cond) +{ + int r = pthread_cond_destroy(&cond->cond); + if(r != 0) + return CHIAKI_ERR_UNKNOWN; + return CHIAKI_ERR_SUCCESS; +} + + + +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_wait(ChiakiCond *cond, ChiakiMutex *mutex) +{ + int r = pthread_cond_wait(&cond->cond, &mutex->mutex); + if(r != 0) + return CHIAKI_ERR_UNKNOWN; + return CHIAKI_ERR_SUCCESS; +} + +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_signal(ChiakiCond *cond) +{ + int r = pthread_cond_signal(&cond->cond); + if(r != 0) + return CHIAKI_ERR_UNKNOWN; + return CHIAKI_ERR_SUCCESS; +} + +CHIAKI_EXPORT ChiakiErrorCode chiaki_cond_broadcast(ChiakiCond *cond) +{ + int r = pthread_cond_broadcast(&cond->cond); + if(r != 0) + return CHIAKI_ERR_UNKNOWN; + return CHIAKI_ERR_SUCCESS; +}