github.com/afumu/libc@v0.0.6/musl/src/thread/vmlock.c (about)

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