3 #include "pthread_impl.h"
5 int sem_post(sem_t
*sem
)
7 int val
, new, waiters
, priv
= sem
->__val
[2];
10 waiters
= sem
->__val
[1];
11 if ((val
& SEM_VALUE_MAX
) == SEM_VALUE_MAX
) {
18 } while (a_cas(sem
->__val
, val
, new) != val
);
19 if (val
<0) __wake(sem
->__val
, waiters
>1 ? 1 : -1, priv
);