mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-21 22:13:12 -07:00
Add ChiakiMutex
This commit is contained in:
parent
4a46764be4
commit
f3e8164705
3 changed files with 59 additions and 1 deletions
|
@ -34,7 +34,8 @@ typedef enum
|
|||
CHIAKI_ERR_MEMORY,
|
||||
CHIAKI_ERR_NETWORK,
|
||||
CHIAKI_ERR_INVALID_DATA,
|
||||
CHIAKI_ERR_BUF_TOO_SMALL
|
||||
CHIAKI_ERR_BUF_TOO_SMALL,
|
||||
CHIAKI_ERR_MUTEX_LOCKED
|
||||
} ChiakiErrorCode;
|
||||
|
||||
CHIAKI_EXPORT const char *chiaki_error_string(ChiakiErrorCode code);
|
||||
|
|
|
@ -36,6 +36,18 @@ typedef void *(*ChiakiThreadFunc)(void *);
|
|||
CHIAKI_EXPORT ChiakiErrorCode chiaki_thread_create(ChiakiThread *thread, ChiakiThreadFunc func, void *arg);
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_thread_join(ChiakiThread *thread, void **retval);
|
||||
|
||||
|
||||
typedef struct chiaki_mutex_t
|
||||
{
|
||||
pthread_mutex_t mutex;
|
||||
} ChiakiMutex;
|
||||
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_init(ChiakiMutex *mutex);
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_fini(ChiakiMutex *mutex);
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_lock(ChiakiMutex *mutex);
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_trylock(ChiakiMutex *mutex);
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_unlock(ChiakiMutex *mutex);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <chiaki/thread.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_thread_create(ChiakiThread *thread, ChiakiThreadFunc func, void *arg)
|
||||
|
@ -35,3 +36,47 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_thread_join(ChiakiThread *thread, void **re
|
|||
return CHIAKI_ERR_THREAD;
|
||||
return CHIAKI_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_init(ChiakiMutex *mutex)
|
||||
{
|
||||
int r = pthread_mutex_init(&mutex->mutex, NULL);
|
||||
if(r != 0)
|
||||
return CHIAKI_ERR_UNKNOWN;
|
||||
return CHIAKI_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_fini(ChiakiMutex *mutex)
|
||||
{
|
||||
int r = pthread_mutex_destroy(&mutex->mutex);
|
||||
if(r != 0)
|
||||
return CHIAKI_ERR_UNKNOWN;
|
||||
return CHIAKI_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_lock(ChiakiMutex *mutex)
|
||||
{
|
||||
int r = pthread_mutex_lock(&mutex->mutex);
|
||||
if(r != 0)
|
||||
return CHIAKI_ERR_UNKNOWN;
|
||||
return CHIAKI_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_trylock(ChiakiMutex *mutex)
|
||||
{
|
||||
int r = pthread_mutex_trylock(&mutex->mutex);
|
||||
if(r == EBUSY)
|
||||
return CHIAKI_ERR_MUTEX_LOCKED;
|
||||
else if(r != 0)
|
||||
return CHIAKI_ERR_UNKNOWN;
|
||||
return CHIAKI_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_mutex_unlock(ChiakiMutex *mutex)
|
||||
{
|
||||
int r = pthread_mutex_unlock(&mutex->mutex);
|
||||
if(r != 0)
|
||||
return CHIAKI_ERR_UNKNOWN;
|
||||
return CHIAKI_ERR_SUCCESS;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue