博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux系统内核驱动之位操作
阅读量:5306 次
发布时间:2019-06-14

本文共 850 字,大约阅读时间需要 2 分钟。

Linux系统驱动之位操作

atomic_t 类型在进行整数算术时是不错的。 但是, 它无法工作的好, 当你需要以原子方式操作单个位时。 为此, 内核提供了一套函数来原子地修改或测试单个位。 因为整个操作在单步内发生, 没有中断(或者其他处理器)能干扰。  www.ahlinux.com  

  原子位操作非常快, 因为它们使用单个机器指令来进行操作, 而在任何时候低层平台做的时候不用禁止中断。 函数是体系依赖的并且在 中声明。 它们保证是原子的, 即便在 SMP 计算机上, 并且对于跨处理器保持一致是有用的。

  不幸的是, 键入这些函数中的数据也是体系依赖的。 nr 参数(描述要操作哪个位)常常定义为 int, 但是在几个体系中是 unsigned long. 要修改的地址常常是一个 unsigned long 指针, 但是几个体系使用 void * 代替。

  各种位操作是:

  void set_bit(nr, void *addr);

  设置第 nr 位在 addr 指向的数据项中。

  void clear_bit(nr, void *addr);

  清除指定位在 addr 处的无符号长型数据。 它的语义与 set_bit 的相反。

  void change_bit(nr, void *addr);

  翻转这个位。

  test_bit(nr, void *addr);

  这个函数是唯一一个不需要是原子的位操作; 它简单地返回这个位的当前值。

  int test_and_set_bit(nr, void *addr);

  int test_and_clear_bit(nr, void *addr);

  int test_and_change_bit(nr, void *addr);

  原子地动作如同前面列出的, 除了它们还返回这个位以前的值。

 

  • 本文来自:

转载于:https://www.cnblogs.com/out8/p/4225924.html

你可能感兴趣的文章
第五章 如何使用Burp Target
查看>>
Sprint阶段测试评分总结
查看>>
sqlite3经常使用命令&语法
查看>>
linux下编译openjdk8
查看>>
【python】--迭代器生成器装饰器
查看>>
Pow(x, n)
查看>>
安卓当中的线程和每秒刷一次
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
属性动画
查看>>
标识符
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
快来熟练使用 Mac 编程
查看>>