1#include <semaphore.h>
2#include "pthread_impl.h"
3
4int 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