锁(一) 中断屏蔽 原子操作

中断屏蔽

单cpu,在单cpu范围内避免竞态的简单方法是在进入临界区之前屏蔽系统的中断。cpu一般都具备屏蔽中断和打开中断

的功能,这项功能可以保证正在执行的内核执行路径不被中断处理程序抢占,防止某些竞态条件的发生。由于linux内核

的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也得以避免。

中断屏蔽的使用方法为:

local_irq_disable()    //屏蔽中断

...

critical section            //临界区

...

local_irq_enable()    //开中断

由于linux的异步I/O,进程调度等很多重要操作都依赖于中断,中断对于内核的运行非常重要,在屏蔽中断期间所有的中

断都无法得到处理,因此长时间屏蔽中断是很危险的,有可能造成数据丢失乃至系统崩溃等后果。在就要求在屏蔽中断

之后,当前的内核执行路径应当尽快地执行完临界区的代码。

local_irq_disable()和local_irq_enable()只能屏蔽使能本cpu(单个cpu)的中断,因此不适合多cpu的竞态处理。因此

单独使用中断屏蔽通常不是一种值得推荐的避免竞态的方法,它适合于自旋锁联合使用。

与local_irq_disable()不同的是,local_irq_save(flags)除了进行禁止中断的操作以外,还保存目前CPU的中断位信息。

如果只是想禁止使能中断的底半部,应使用local_bh_disable(),local_bh_enable()。

原子操作

原子操作指的是在执行过程中不会被别

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ghost+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值