#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); }