Added mutex abstraction

svn: r11614
This commit is contained in:
Kevin Tew 2008-09-09 15:56:54 +00:00
parent c2fe5919c8
commit ba47325536
2 changed files with 67 additions and 0 deletions

View File

@ -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

View File

@ -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