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