Add mzrt_sema_trywait to the mzrt library.
This commit add mzrt_sema_try_wait to the functions that operate on semaphores. The existing ones are: * int mzrt_sema_create(mzrt_sema **sema, int init); * int mzrt_sema_post(mzrt_sema *sema); * int mzrt_sema_wait(mzrt_sema *sema); * int mzrt_sema_destroy(mzrt_sema *sema);
This commit is contained in:
parent
40d4a35329
commit
5c27f5550c
|
@ -598,6 +598,18 @@ int mzrt_sema_wait(mzrt_sema *s)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int mzrt_sema_trywait(mzrt_sema *s)
|
||||
{
|
||||
int locked = 1;
|
||||
pthread_mutex_lock(&s->m);
|
||||
if(s->ready) {
|
||||
--s->ready;
|
||||
locked = 0;
|
||||
}
|
||||
pthread_mutex_unlock(&s->m);
|
||||
return locked;
|
||||
}
|
||||
|
||||
int mzrt_sema_post(mzrt_sema *s)
|
||||
{
|
||||
pthread_mutex_lock(&s->m);
|
||||
|
@ -810,6 +822,11 @@ int mzrt_sema_wait(mzrt_sema *s)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int mzrt_sema_trywait(mzrt_sema *s)
|
||||
{
|
||||
return WaitForSingleObject(s->ws, 0);
|
||||
}
|
||||
|
||||
int mzrt_sema_post(mzrt_sema *s)
|
||||
{
|
||||
ReleaseSemaphore(s->ws, 1, NULL);
|
||||
|
|
|
@ -86,6 +86,7 @@ typedef struct mzrt_sema mzrt_sema; /* OPAQUE DEFINITION */
|
|||
int mzrt_sema_create(mzrt_sema **sema, int init);
|
||||
int mzrt_sema_post(mzrt_sema *sema);
|
||||
int mzrt_sema_wait(mzrt_sema *sema);
|
||||
int mzrt_sema_trywait(mzrt_sema *sema);
|
||||
int mzrt_sema_destroy(mzrt_sema *sema);
|
||||
|
||||
/****************** Compare and Swap *******************************/
|
||||
|
|
Loading…
Reference in New Issue
Block a user