diff options
Diffstat (limited to 'src/lib9/lock-tas.c')
| -rw-r--r-- | src/lib9/lock-tas.c | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/src/lib9/lock-tas.c b/src/lib9/lock-tas.c deleted file mode 100644 index e6f54de6..00000000 --- a/src/lib9/lock-tas.c +++ /dev/null @@ -1,57 +0,0 @@ -#include <u.h> -#include <unistd.h> -#include <sys/time.h> -#include <sched.h> -#include <libc.h> - -int _ntas; -static int -_xtas(void *v) -{ - int x; - - _ntas++; - x = _tas(v); - if(x != 0 && x != 0xcafebabe){ - print("bad tas value %d\n", x); - abort(); - } - 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); -} |
