• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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