void
lock(ulong *l)
{
ulong old;
ushort next, owner;
old = _xadd(l, 1);
for(;;){
next = old;
owner = old>>16;
old = *l;
if(next == owner)
break;
}
}
void
unlock(ulong *l)
{
_xadd(l, 1<<16);
}
- erik
