互斥锁-第二十七天
2024-01-02 06:20:08
互斥锁
定义:解决临界区最简单的工具(一个进程在进入临界区时应获得锁;在退出临界区时释放锁。函数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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!