原子操作

简介

原子操作用于执行轻量级、仅执行一次的操作,例如修改计数器、有条件的增加值、设置位等。原子操作可以确保操作的串行化,不再需要锁进行并发访问保护。原子操作的具体实现取决于体系架构。

为了在释放内核网络缓冲区(称为 skbuff)之前检查是否还有余留的数据引用,定义于 net/core/skbuff.c 文件中 skb_relerse_data( ) 函数将进行如下操作:

1319058-20180415154819411-1355472672.png

当 skb_release_data( ) 执行的时候,另一个调用 skbuff_clone( ) (也在 net/core/skbuff.c 文件中定义)的执行单元也许在同步地增加数据引用计数值:

1319058-20180415154830682-175443530.png

原子操作的使用将确保数据引用计数不会被这两个执行单元“蹂躏”。它也消除了使用锁去保护单一整型变量的争论。

内核也支持 set_bit( )、clear_bit( ) 和 test_and_set_bit( ) 操作,它们可用于原子地进行位修改。查看 include/"asm-your-arch"/atomic.h 文件可以看出你所在体系架构所支持的原子操作。

转载于:https://www.cnblogs.com/GyForever1004/p/8847888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值