首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
编程技术
发新帖
0
0
[讨论]一个关于防止编译器优化特定代码的问题
发表于: 2014-3-4 18:38
3889
[讨论]一个关于防止编译器优化特定代码的问题
sunbinjin
1
2014-3-4 18:38
3889
问题描述(为简化问题,设想的以下代码):
有1个全局变量:
int a = 0;
2个线程:
A线程负责对a进行写:
while (1)
a++;
B线程负责对a进行读:
while(1)
{
if (a%2)
{
......//这里代码多,可能导致a不在寄存器里
int x = a/2;
}
}
问题在于B线程一次循环内,代码中有连续2次对A进行读,有可能前后不一致,因为A线程一直在写,
我对此的解决方法是:
int aa = a;
if (aa%2)
{
......//这里代码多,可能导致a不在寄存器里
int x = aa/2;
}
用中间变量来保存一次,保证只对a的一次性读,理论上不会出现前后不一致
但是:
编译会优化代码,它是不是有可能将aa=a优化成直接对a的读,因为它觉得没必要用变量转一次?
这样就破坏了我的本意?
所以我的问题是:
1.这种可能破坏我的本意的优化是否存在?
2.如果存在,如何解决?
volatile aa=a?但好像会导致每次对aa的访问都去内存读一次,慢?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
2
)
半道出家
雪 币:
724
活跃值:
(81)
能力值:
( LV3,RANK:20 )
在线值:
发帖
5
回帖
207
粉丝
0
关注
私信
半道出家
2
楼
volatile int a=0;
...
int aa=a;
2014-3-4 20:38
0
sunbinjin
雪 币:
174
活跃值:
(620)
能力值:
( LV4,RANK:50 )
在线值:
发帖
77
回帖
466
粉丝
3
关注
私信
sunbinjin
1
3
楼
这样是禁止a的优化,aa没说不能优化吧?我不知道我的理解对不对啊
2014-3-5 09:37
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
sunbinjin
1
77
发帖
466
回帖
50
RANK
关注
私信
他的文章
如何抓住程序在哪里退出的?想用于出错时生成Dump
5171
[求助]有什么工具是可以分析目标程序使用了哪些API?
5271
[求助]如何比较简单的获取C++接口的某个方法的地址?
7357
[讨论]ReadFile能跑满速,fopen+fread测试速度都不行。有解不?
5333
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部