summaryrefslogblamecommitdiff
path: root/src/thread/__lock.c
blob: d1717956a6f96f3ec1b0bb490350aab0dad4cf13 (plain) (tree)
1
2
3
4
5
6
7
8
9



                            
                        

                                                                              
                            
                                             
                                                
 
#include "pthread_impl.h"

void __lock(volatile int *l)
{
	int spins=10000;
	/* Do not use futexes because we insist that unlocking is a simple
	 * assignment to optimize non-pathological code with no contention. */
	while (a_swap(l, 1))
		if (spins) spins--, a_spin();
		else __syscall(SYS_sched_yield);
}