加入收藏 | 设为首页 | 会员中心 | 我要投稿 西双版纳站长网 (https://www.0691zz.com.cn/)- 数据计算、IT业界、服务器、教程、云日志!
当前位置: 首页 > 服务器 > 安全 > 正文

互斥锁的原理及作用

发布时间:2020-12-24 17:55:51 所属栏目:安全 来源:网络整理
导读:操作系统设计人员构建软件工具,以解决临界区问题,最简单的工具就是 互斥锁(mutex lock) 。我们采用互斥锁保护临界区,从而防止竞争条件。 也就是说,一个进程在进入临界区时应得到锁;它在退出临界区时释放锁。函数 acquire() 获取锁,而函数 release()

操作系统设计人员构建软件工具,以解决临界区问题,最简单的工具就是互斥锁(mutex lock)。我们采用互斥锁保护临界区,从而防止竞争条件。

也就是说,一个进程在进入临界区时应得到锁;它在退出临界区时释放锁。函数 acquire() 获取锁,而函数 release() 释放锁,见图 1 。
互斥锁的原理及作用
图 1 采用互斥锁的临界区问题的解答
每个互斥锁有一个布尔变量 available,它的值表示锁是否可用。如果锁是可用的,那么调用 acquire() 会成功,并且锁不再可用。当一个进程试图获取不可用的锁时,它会阻塞,直到锁被释放。

按如下定义 acquire():

acquire() {
? ? while (!available)
? ? ;/* busy wait */
? ? available = false;;
}


按如下定义release():

release() {
? ? available = true;
}

这里所给实现的主要缺点是,它需要忙等待(busy waiting)。当有一个进程在临界区中,任何其他进程在进入临界区时必须连续循环地调用 acquire()。其实,这种类型的互斥锁也被称为自旋锁,因为进程不停地旋转,以等待锁变得可用。在实际多道程序系统中,即当多个进程共享同一 CPU 时,这种连续循环显然是个问题。忙等待浪费 CPU 周期,而这原本可以有效用于其他进程。

不过,自旋锁确实有一个优点,当进程在等待锁时,没有上下文切换(上下文切换可能需要相当长的时间)。因此,当使用锁的时间较短时,自旋锁还是有用的。自旋锁通常用于多处理器系统,一个线程可以在一个处理器上“旋转”,而其他线程在其他处理器上执行临界区。

(编辑:西双版纳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读