mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-22 06:23:11 -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_MEMORY,
|
||||||
CHIAKI_ERR_NETWORK,
|
CHIAKI_ERR_NETWORK,
|
||||||
CHIAKI_ERR_INVALID_DATA,
|
CHIAKI_ERR_INVALID_DATA,
|
||||||
CHIAKI_ERR_BUF_TOO_SMALL
|
CHIAKI_ERR_BUF_TOO_SMALL,
|
||||||
|
CHIAKI_ERR_MUTEX_LOCKED
|
||||||
} ChiakiErrorCode;
|
} ChiakiErrorCode;
|
||||||
|
|
||||||
CHIAKI_EXPORT const char *chiaki_error_string(ChiakiErrorCode code);
|
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_create(ChiakiThread *thread, ChiakiThreadFunc func, void *arg);
|
||||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_thread_join(ChiakiThread *thread, void **retval);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <chiaki/thread.h>
|
#include <chiaki/thread.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_thread_create(ChiakiThread *thread, ChiakiThreadFunc func, void *arg)
|
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_THREAD;
|
||||||
return CHIAKI_ERR_SUCCESS;
|
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