#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; | |
} |