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