From 4abab5ad6c8465a7528ccdd5f49367da05f78bbd Mon Sep 17 00:00:00 2001 From: Vladimir Azarov Date: Tue, 1 Oct 2024 15:47:05 +0200 Subject: Initial version --- src/thread/vmlock.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/thread/vmlock.c (limited to 'src/thread/vmlock.c') diff --git a/src/thread/vmlock.c b/src/thread/vmlock.c new file mode 100644 index 0000000..fa0a8e3 --- /dev/null +++ b/src/thread/vmlock.c @@ -0,0 +1,23 @@ +#include "pthread_impl.h" +#include "fork_impl.h" + +static volatile int vmlock[2]; +volatile int *const __vmlock_lockptr = vmlock; + +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); +} -- cgit v1.2.3