定义:解决临界区最简单的工具(一个进程在进入临界区时应获得锁;在退出临界区时释放锁。函数acquire()获得锁,release()释放锁)
注意事项:acquire()或release()的执行必须是原子操作,因此互斥锁通常采用硬件机制来实现?
????????每个互斥锁有一个布尔变量available,表示锁是否可用(true)。可用则可成功调用acquire(),且锁不可再用。当一个进程试图获取不可用的锁(false)时,会被阻塞,直到锁被释放:
acquire()
{
while(!available) //忙等待
;
available = false; //获得锁
}
release()
{
available = true; //获得锁
}
优点:等待时间不用进程切换,多处理机系统中,若上锁时间短,则等待时间很低
故互斥锁常用于多处理机系统,一个核忙等,其他核照常工作,并快速释放临界区
缺点:当available为false时调用acquire()会出现忙等待问题,在单处理机系统中一个进程即使处于忙等待,也只能等分配给它的时间片用完才能下处理机,违反“让权等待”原则(当有一个进程在临界区中,任何其他进程在进入临界区前(进入区)必须连续循环调用acquire()。当多个进程共享同一CPU时,就浪费了CPU周期)
故互斥锁不太适用于单处理机系统,忙等的过程中不可能解锁
补充:需要连续循环忙等的互斥锁均称为自旋锁(如TSL指令、Swap指令、单标志法)
~over~