如何避免spinlock
如果Semaphore这样实现,就可能导致spinlock:
acquire(){ while(value <= 0) ; //no-op value--; } release(){ value++; }
acquire(){ value--; if(value < 0){ add this process to list; block(); } } release(){ value++; if(value <= 0){ remove a process P from list wakeup(P); } }