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;
|
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)
|
int mzrt_sema_post(mzrt_sema *s)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&s->m);
|
pthread_mutex_lock(&s->m);
|
||||||
|
@ -810,6 +822,11 @@ int mzrt_sema_wait(mzrt_sema *s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mzrt_sema_trywait(mzrt_sema *s)
|
||||||
|
{
|
||||||
|
return WaitForSingleObject(s->ws, 0);
|
||||||
|
}
|
||||||
|
|
||||||
int mzrt_sema_post(mzrt_sema *s)
|
int mzrt_sema_post(mzrt_sema *s)
|
||||||
{
|
{
|
||||||
ReleaseSemaphore(s->ws, 1, NULL);
|
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_create(mzrt_sema **sema, int init);
|
||||||
int mzrt_sema_post(mzrt_sema *sema);
|
int mzrt_sema_post(mzrt_sema *sema);
|
||||||
int mzrt_sema_wait(mzrt_sema *sema);
|
int mzrt_sema_wait(mzrt_sema *sema);
|
||||||
|
int mzrt_sema_trywait(mzrt_sema *sema);
|
||||||
int mzrt_sema_destroy(mzrt_sema *sema);
|
int mzrt_sema_destroy(mzrt_sema *sema);
|
||||||
|
|
||||||
/****************** Compare and Swap *******************************/
|
/****************** Compare and Swap *******************************/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user