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

本文介绍了Linux内核中如何通过中断屏蔽避免竞态条件,详细讲解了local_irq_disable()和local_irq_enable()的使用,并指出长时间屏蔽中断的风险。接着讨论了原子操作在多线程环境中的重要性,提供了原子操作的种类和使用场景。此外,还详细阐述了自旋锁的概念,包括自旋锁的获取与释放,以及使用自旋锁应注意的问题。最后,提到了读写自旋锁和顺序锁作为自旋锁的优化,提高并发性的特性及应用场景。
摘要由CSDN通过智能技术生成

中断屏蔽

单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_disabl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HeathXian

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

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

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

打赏作者

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

抵扣说明:

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

余额充值