preempt_disable的问题
时间:2010-12-09
来源:互联网
各位,我对preempt_disable加barrier()的方式不理解,preempt_disable需要控制指令的执行顺序,这个容易理解。比如
preempt_disable();
a++;
preempt_enable();
如果不控制的话,a++可能在抢占被禁用之前就执行,使preempt_disable失去意义。但是内核的实现怎么只用一个barrier(),这个只能控制编译器不乱序吧,如果cpu乱序执行怎么办? 望大侠指点。
附上preempt_disable的代码:
30 #define preempt_disable() \
31 do { \
32 inc_preempt_count(); \
33 barrier(); \
34 } while (0)
preempt_disable();
a++;
preempt_enable();
如果不控制的话,a++可能在抢占被禁用之前就执行,使preempt_disable失去意义。但是内核的实现怎么只用一个barrier(),这个只能控制编译器不乱序吧,如果cpu乱序执行怎么办? 望大侠指点。
附上preempt_disable的代码:
30 #define preempt_disable() \
31 do { \
32 inc_preempt_count(); \
33 barrier(); \
34 } while (0)
作者: biger410 发布时间: 2010-12-09
QUOTE:
这个只能控制编译器不乱序吧,如果cpu乱序执行怎么办?
回复 biger410
你说的cpu乱序执行是什么意思?barrier应该就可以保证之前和之后的在时间序上是有先后的吧。cpu体系结构上不懂,但是就算是pipeline乱序发射,也是在微指令层面上,EIP取指令的时候会遇到这个barrier的内存栅吧。
作者: kgn28 发布时间: 2010-12-10
barrier的作用保证写入内存的操作结束之前不会执行下面的代码。inc_preempt_count();会修改内存
作者: liying_gg 发布时间: 2010-12-10
barrier() 保证的是 cpu 不乱序执行。而不是编译器吧。
作者: linyunxian 发布时间: 2010-12-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28