Added mutex abstraction
svn: r11614
This commit is contained in:
parent
c2fe5919c8
commit
ba47325536
|
@ -240,6 +240,32 @@ int mzrt_rwlock_destroy(mzrt_rwlock *lock) {
|
|||
return pthread_rwlock_destroy(&lock->lock);
|
||||
}
|
||||
|
||||
struct mzrt_mutex {
|
||||
pthread_mutex_t mutex;
|
||||
};
|
||||
|
||||
int mzrt_mutex_create(mzrt_mutex **mutex) {
|
||||
*mutex = malloc(sizeof(mzrt_mutex));
|
||||
return pthread_mutex_init(&(*mutex)->mutex, NULL);
|
||||
}
|
||||
|
||||
int mzrt_mutex_lock(mzrt_mutex *mutex) {
|
||||
return pthread_mutex_lock(&mutex->mutex);
|
||||
}
|
||||
|
||||
int mzrt_mutex_trylock(mzrt_mutex *mutex) {
|
||||
return pthread_mutex_trylock(&mutex->mutex);
|
||||
}
|
||||
|
||||
int mzrt_mutex_unlock(mzrt_mutex *mutex) {
|
||||
return pthread_mutex_unlock(&mutex->mutex);
|
||||
}
|
||||
|
||||
int mzrt_mutex_destroy(mzrt_mutex *mutex) {
|
||||
return pthread_mutex_destroy(&mutex->mutex);
|
||||
}
|
||||
|
||||
|
||||
#ifdef MZ_XFORM
|
||||
END_XFORM_SUSPEND;
|
||||
#endif
|
||||
|
@ -353,6 +379,37 @@ int mzrt_rwlock_destroy(mzrt_rwlock *lock) {
|
|||
return rc;
|
||||
}
|
||||
|
||||
struct mzrt_mutex {
|
||||
CRITICAL_SECTION critical_section;
|
||||
};
|
||||
|
||||
int mzrt_mutex_create(mzrt_mutex **mutex) {
|
||||
*mutex = malloc(sizeof(mzrt_mutex));
|
||||
InitializeCriticalSection(&(*mutex)->critical_section);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mzrt_mutex_lock(mzrt_mutex *mutex) {
|
||||
EnterCriticalSection(&(*mutex)->critical_section);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mzrt_mutex_trylock(mzrt_mutex *mutex) {
|
||||
if (!TryEnterCriticalSection(&(*mutex)->critical_section))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mzrt_mutex_unlock(mzrt_mutex *mutex) {
|
||||
LeaveCriticalSection(&(*mutex)->critical_section);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mzrt_mutex_destroy(mzrt_mutex *mutex) {
|
||||
DeleteCriticalSection(&(*mutex)->critical_section);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef MZ_XFORM
|
||||
END_XFORM_SUSPEND;
|
||||
#endif
|
||||
|
|
|
@ -36,6 +36,8 @@ void *mz_proc_thread_wait(mz_proc_thread *thread);
|
|||
|
||||
void mzrt_sleep(int seconds);
|
||||
|
||||
int mz_proc_thread_self();
|
||||
int mz_proc_thread_id(mz_proc_thread* thread);
|
||||
|
||||
/****************** THREAD RWLOCK ******************************************/
|
||||
/* mzrt_rwlock_*.c */
|
||||
|
@ -48,6 +50,14 @@ int mzrt_rwlock_trywrlock(mzrt_rwlock *lock);
|
|||
int mzrt_rwlock_unlock(mzrt_rwlock *lock);
|
||||
int mzrt_rwlock_destroy(mzrt_rwlock *lock);
|
||||
|
||||
/****************** THREAD MUTEX ******************************************/
|
||||
typedef struct mzrt_mutex mzrt_mutex; /* OPAQUE DEFINITION */
|
||||
int mzrt_mutex_create(mzrt_mutex **mutex);
|
||||
int mzrt_mutex_lock(mzrt_mutex *mutex);
|
||||
int mzrt_mutex_trylock(mzrt_mutex *mutex);
|
||||
int mzrt_mutex_unlock(mzrt_mutex *mutex);
|
||||
int mzrt_mutex_destroy(mzrt_mutex *mutex);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user