Index: fusl/src/thread/mtx_trylock.c |
diff --git a/fusl/src/thread/mtx_trylock.c b/fusl/src/thread/mtx_trylock.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..61e7694edcda2528f8c184a4e91feb7060b23051 |
--- /dev/null |
+++ b/fusl/src/thread/mtx_trylock.c |
@@ -0,0 +1,17 @@ |
+#include "pthread_impl.h" |
+#include <threads.h> |
+ |
+int __pthread_mutex_trylock(mtx_t *); |
+ |
+int mtx_trylock(mtx_t *m) |
+{ |
+ if (m->_m_type == PTHREAD_MUTEX_NORMAL) |
+ return (a_cas(&m->_m_lock, 0, EBUSY) & EBUSY) ? thrd_busy : thrd_success; |
+ |
+ int ret = __pthread_mutex_trylock(m); |
+ switch (ret) { |
+ default: return thrd_error; |
+ case 0: return thrd_success; |
+ case EBUSY: return thrd_busy; |
+ } |
+} |