Add ChiakiCond

This commit is contained in:
Florian Märkl 2018-11-20 14:03:38 +01:00
commit ad6295d706
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
2 changed files with 59 additions and 1 deletions

View file

@ -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_trylock(ChiakiMutex *mutex);
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_unlock(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 #ifdef __cplusplus
} }
#endif #endif

View file

@ -80,3 +80,48 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_unlock(ChiakiMutex *mutex)
return CHIAKI_ERR_UNKNOWN; return CHIAKI_ERR_UNKNOWN;
return CHIAKI_ERR_SUCCESS; return CHIAKI_ERR_SUCCESS;
} }
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;
}