xref: /plan9/sys/src/ape/lib/ap/sparc/lock.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #define _LOCK_EXTENSION
2*219b2ee8SDavid du Colombier #include "../plan9/sys9.h"
3*219b2ee8SDavid du Colombier #include <lock.h>
4*219b2ee8SDavid du Colombier 
5*219b2ee8SDavid du Colombier int	tas(int*);
6*219b2ee8SDavid du Colombier 
7*219b2ee8SDavid du Colombier void
8*219b2ee8SDavid du Colombier lockinit(void)
9*219b2ee8SDavid du Colombier {
10*219b2ee8SDavid du Colombier }
11*219b2ee8SDavid du Colombier 
12*219b2ee8SDavid du Colombier void
13*219b2ee8SDavid du Colombier lock(Lock *lk)
14*219b2ee8SDavid du Colombier {
15*219b2ee8SDavid du Colombier 	while(tas(&lk->val))
16*219b2ee8SDavid du Colombier 		_SLEEP(0);
17*219b2ee8SDavid du Colombier }
18*219b2ee8SDavid du Colombier 
19*219b2ee8SDavid du Colombier int
20*219b2ee8SDavid du Colombier canlock(Lock *lk)
21*219b2ee8SDavid du Colombier {
22*219b2ee8SDavid du Colombier 	if(tas(&lk->val))
23*219b2ee8SDavid du Colombier 		return 0;
24*219b2ee8SDavid du Colombier 	return 1;
25*219b2ee8SDavid du Colombier }
26*219b2ee8SDavid du Colombier 
27*219b2ee8SDavid du Colombier void
28*219b2ee8SDavid du Colombier unlock(Lock *lk)
29*219b2ee8SDavid du Colombier {
30*219b2ee8SDavid du Colombier 	lk->val = 0;
31*219b2ee8SDavid du Colombier }
32