首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

如何处理spinlock

2013-02-24 
如何避免spinlock如果Semaphore这样实现,就可能导致spinlock:acquire(){while(value 0) //no-opvalue-

如何避免spinlock
如果Semaphore这样实现,就可能导致spinlock:

   

        acquire(){            while(value <= 0)                ; //no-op            value--;        }            release(){            value++;        }                

当进程等待时,cpu会空转,也就是说进程会spin(自旋),导致CPU浪费。
   
所以应该改空转为阻塞,把cpu让给操作系统的scheduler. 恐龙书上介绍的实现为:
   
        acquire(){            value--;            if(value < 0){                add this process to list;                block();            }        }        release(){            value++;            if(value <= 0){                remove a process P from list                wakeup(P);            }        }        

   

热点排行