1 #include "pthread_impl.h" 2 3 static volatile int vmlock[2]; 4 __vm_wait()5void __vm_wait() 6 { 7 int tmp; 8 while ((tmp=vmlock[0])) 9 __wait(vmlock, vmlock+1, tmp, 1); 10 } 11 __vm_lock()12void __vm_lock() 13 { 14 a_inc(vmlock); 15 } 16 __vm_unlock()17void __vm_unlock() 18 { 19 if (a_fetch_add(vmlock, -1)==1 && vmlock[1]) 20 __wake(vmlock, -1, 1); 21 } 22