github.com/afumu/libc@v0.0.6/musl/src/thread/vmlock.c (about) 1 #include "pthread_impl.h" 2 3 static volatile int vmlock[2]; 4 5 void __vm_wait() 6 { 7 int tmp; 8 while ((tmp=vmlock[0])) 9 __wait(vmlock, vmlock+1, tmp, 1); 10 } 11 12 void __vm_lock() 13 { 14 a_inc(vmlock); 15 } 16 17 void __vm_unlock() 18 { 19 if (a_fetch_add(vmlock, -1)==1 && vmlock[1]) 20 __wake(vmlock, -1, 1); 21 }