| #include "pthread_impl.h" | |
| int pthread_rwlock_tryrdlock(pthread_rwlock_t* rw) { | |
| int val, cnt; | |
| do { | |
| val = rw->_rw_lock; | |
| cnt = val & 0x7fffffff; | |
| if (cnt == 0x7fffffff) | |
| return EBUSY; | |
| if (cnt == 0x7ffffffe) | |
| return EAGAIN; | |
| } while (a_cas(&rw->_rw_lock, val, val + 1) != val); | |
| return 0; | |
| } |