Index: fusl/src/thread/pthread_rwlock_tryrdlock.c |
diff --git a/fusl/src/thread/pthread_rwlock_tryrdlock.c b/fusl/src/thread/pthread_rwlock_tryrdlock.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fa271fcc6a156a78e9dfe975bf084113e3aa3167 |
--- /dev/null |
+++ b/fusl/src/thread/pthread_rwlock_tryrdlock.c |
@@ -0,0 +1,13 @@ |
+#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; |
+} |