24 lines
354 B
C
24 lines
354 B
C
#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);
|
|
}
|