#include <u.h>
#include <unistd.h>
#include <sched.h>
#include <libc.h>

int _ntas;
static int
_xtas(void *v)
{
	int x;

	_ntas++;
	x = _tas(v);
	return x;
}

int
canlock(Lock *l)
{
	return !_xtas(&l->val);
}

void
unlock(Lock *l)
{
	l->val = 0;
}

void
lock(Lock *lk)
{
	int i;

	/* once fast */
	if(!_xtas(&lk->val))
		return;
	/* a thousand times pretty fast */
	for(i=0; i<1000; i++){
		if(!_xtas(&lk->val))
			return;
		sched_yield();
	}
	/* now nice and slow */
	for(i=0; i<1000; i++){
		if(!_xtas(&lk->val))
			return;
		usleep(100*1000);
	}
	/* take your time */
	while(_xtas(&lk->val))
		usleep(1000*1000);
}
