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