原子位操作
来源:互联网 发布:mac的wps office 编辑:程序博客网 时间:2024/05/29 08:03
Linux kernel提供了一些原子位操作的API,比如通过set_bit(int nr, void *addr)设置addr上的第nr位,而clear_bit(int nr, void *addr)用来清除addr上的第nr位。
关于使用原子位操作和非原子位操作的区别,《Linux内核设计与实现》一书中,描述的不是很清楚,很容易引起歧义:
“For example, assume you issue two atomic bit operations: Initially set the bit and then clear the bit. Without atomic operations, the bit might end up cleared, but it might never have been set.”
其实可以这样理解,与对变量进行加加、减减等操作类似,置位操作对应到C语言虽然只有一条语句,但实际上是由多条汇编指令完成的:
- 读取变量的值到寄存器中
- 对寄存器中的值进行置位操作
- 将寄存器中的值写回变量
考虑这样一种场景,全局变量i的初始值为0,CPU0上的执行线程对其第0位置位,同时CPU1上的执行线程正对其第1位置位:
所以当多个执行线程同一时刻对同一变量进行位操作时,就会发生竞争条件。回到上述例子,本来预期的结果是i=0x3, 但当使用非原子位操作时,就有可能得到错误的结果,即i的值是0x1或者0x2。而原子位操作就可以确保结果的正确性,即i=0x3。
1 0
- 原子位操作
- 原子位操作
- 原子位操作
- linux原子/位操作
- 原子位操作
- 64位原子操作add
- linux内核原子变量与原子位操作API
- 28 atomic_t原子数与原子位操作
- 迅为Exynos4412开发板例程及注释——原子操作与原子位操作
- 对64位长整形赋值为原子操作
- Java中对非原子的64位操作
- 原子操作
- 原子操作
- 原子操作
- 原子操作
- 原子操作
- 原子操作
- 原子操作
- 韩顺平Linux笔记(十六)——压缩和解压
- HDU 5198 水 c语言
- 自定义view
- 怎么解决tomcat占用8080端口问题图文教程
- 009-Prefab( 预设 ) srt字幕文件
- 原子位操作
- php模拟一个简易的mvc模型
- 如何在angular指令渲染模板完毕后再执行link方法,render完毕再在link中操作dom节点
- Eclipse debug 查看变量
- 010-Project视窗搜索功能 srt字幕文件
- java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.ConditionalTagSupport
- 矩阵分解模型(1):ALS学习算法
- Java HMAC-SHA1加密算法的实现
- Linux---查看内存型号