blob: b207ae902c047ce9257d62faf16367f18377c7ec (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#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);
}
#ifdef TEST
int
main(void) {
return 0;
}
#endif
|