github.com/afumu/libc@v0.0.6/musl/src/thread/sem_trywait.c (about) 1 #include <semaphore.h> 2 #include "pthread_impl.h" 3 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 }