📄 lock.c
字号:
#include <u.h>#include <libc.h>intcanlock(Lock *lk){ return !tas(&lk->key);}voidlock(Lock *lk){ int i; /* easy case */ if(canlock(lk)) return; /* for multi processor machines */ for(i=0; i<100; i++) if(canlock(lk)) return; for(i=0; i<100; i++) { osyield(); if(canlock(lk)) return; } /* looking bad - make sure it is not a priority problem */ for(i=0; i<12; i++) { osmsleep(1<<i); if(canlock(lk)) return; } /* we are in trouble */ for(;;) { if(canlock(lk)) return; iprint("lock loop %ld: val=%d &lock=%ux pc=%p\n", getpid(), lk->key, lk, getcallerpc(&lk)); osmsleep(1000); }}voidunlock(Lock *lk){ assert(lk->key); lk->key = 0;}voidilock(Lock *lk){ lock(lk);}voidiunlock(Lock *lk){ unlock(lk);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -