#include <semaphore.h> | |
#include "pthread_impl.h" | |
int sem_trywait(sem_t* sem) { | |
int val; | |
while ((val = sem->__val[0]) > 0) { | |
int new = val - 1 - (val == 1 && sem->__val[1]); | |
if (a_cas(sem->__val, val, new) == val) | |
return 0; | |
} | |
errno = EAGAIN; | |
return -1; | |
} |