1 #include <semaphore.h> 2 #include "pthread_impl.h" 3 sem_trywait(sem_t * sem)4 int sem_trywait(sem_t *sem) 5 { 6 int val; 7 while ((val=sem->__val[0]) > 0) { 8 int new = val-1-(val==1 && sem->__val[1]); 9 if (a_cas(sem->__val, val, new)==val) return 0; 10 } 11 errno = EAGAIN; 12 return -1; 13 } 14