Index: fusl/src/thread/vmlock.c |
diff --git a/fusl/src/thread/vmlock.c b/fusl/src/thread/vmlock.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..75f3cb76190fe4e8796997e7c3d29af80fb36792 |
--- /dev/null |
+++ b/fusl/src/thread/vmlock.c |
@@ -0,0 +1,21 @@ |
+#include "pthread_impl.h" |
+ |
+static volatile int vmlock[2]; |
+ |
+void __vm_wait() |
+{ |
+ int tmp; |
+ while ((tmp=vmlock[0])) |
+ __wait(vmlock, vmlock+1, tmp, 1); |
+} |
+ |
+void __vm_lock() |
+{ |
+ a_inc(vmlock); |
+} |
+ |
+void __vm_unlock() |
+{ |
+ if (a_fetch_add(vmlock, -1)==1 && vmlock[1]) |
+ __wake(vmlock, -1, 1); |
+} |