互斥锁-第二十七天

发布时间:2024年01月02日

互斥锁

定义:解决临界区最简单的工具(一个进程在进入临界区时应获得锁;在退出临界区时释放锁。函数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~

文章来源:https://blog.csdn.net/m0_73975164/article/details/135330254
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。