UNLOCKED
if (atomic_cas_uint(&mutex->lock, UNLOCKED, LOCKED) == UNLOCKED) {
if (mutex->lock == UNLOCKED)
lock = atomic_cas_uint(&mutex->lock, UNLOCKED, LOCKED);
if (lock == UNLOCKED) {
while (lock != UNLOCKED) {
if (atomic_dec_int_nv(&mutex->lock) != UNLOCKED) {
mutex->lock = UNLOCKED;
if (mutex->lock != UNLOCKED) {
if (val == UNLOCKED || (val & WAITING))
if (val == UNLOCKED || (COUNT(val)) != WRITER)
if (atomic_cas_uint(&rwlock->value, UNLOCKED, WRITER) != UNLOCKED)
if (val == UNLOCKED || (val & WAITING))
if (val == UNLOCKED)
new = UNLOCKED;
if (new == UNLOCKED && (val & WAITING))
if (rwlock->value != UNLOCKED) {
state = UNLOCKED;
state = UNLOCKED;