lock.c
来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 65 行
C
65 行
#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 + =
减小字号Ctrl + -
显示快捷键?